重写适用于所有请求的 Web.config 规则

Rewriting Web.config rule applying to all requests

我花了几个小时试图找到一种方法(我没有真正掌握复杂的 IIS 文档)使 URLS 友好,同时在 public 文件夹中保留一个入口点。我的意思是,当用户键入:

"localchosy/myproject/route1"

内部规则将其重定向到:

"localhost/myproject/public/index.php/route1"

我写的规则是,(我认为)它很有魅力,是:

    <system.webServer>
      <rewrite>
          <rules>
            <!-- REWRITING INDEX.PHP -->
                <rule name="Default" stopProcessing="true" >
                    <match url="[/^myproject$/]{1}(.*)" />
                    <action type="Rewrite" url="myrpoject/public/index.php" />    
                </rule>
          </rules>
      </rewrite>
  </system.webServer>

尽管我仍然需要添加 https 强制执行并阻止对文件夹的直接访问,但它确实起作用了(该应用程序仍处于测试阶段)。但是,令我惊讶的是,当我写

localhost/phpmyadmin

服务器重定向重写为

localhost/myproject/public/index.php/phpmyadmin

很明显我对这些规则有些不理解。我认为“匹配”标签意味着只有在存在正则表达式匹配时才应用规则,但显然不是这样......事实上,我使用的前缀带有 url 属性匹配标签什么都不做...我不明白。

如何使规则仅适用于以“myproject”开头的 URL...

PS:目前我在 inetub/wwwroot 中有 web.config 文件,与项目处于同一级别。

谢谢。

我测试了你的规则并做了一些修改。请试试这个。

<rule name="Default" stopProcessing="true">
                <match url="myproject/(.*)" />
                <action type="Rewrite" url="myrpoject/public/index.php/{R:1}" />
                <conditions>
                    <add input="{REQUEST_URI}" pattern="myproject/public/(.*)" negate="true" />
                </conditions>    
</rule>

这是失败请求跟踪的日志。