【问题标题】:Rewriting Web.config rule applying to all requests重写适用于所有请求的 Web.config 规则
【发布时间】:2021-02-07 17:22:39
【问题描述】:

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

"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 文件,位于项目的同一级别。

谢谢。

【问题讨论】:

    标签: iis url-rewriting web-config friendly-url


    【解决方案1】:

    我测试了您的规则并进行了一些更改。请试试这个。

    <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>
    

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

    【讨论】:

    • 触发“未指定文件输入”错误。我正在使用 php 和 cgi,如果有帮助的话....
    • 对不起。它工作得很好(我有一个错字)。非常感谢,你救了我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2019-06-23
    • 2013-08-19
    • 2012-12-06
    相关资源
    最近更新 更多