IIS中的URL重写循环

时间:2017-12-28 17:59:00

标签: asp.net iis url-rewriting

我有一个非常简单的URL重写重定向规则,导致无限循环。当它失败时,"不能显示页面"显示错误。任何错误捕获提示或脚本修改将不胜感激。

 <rewrite>
    <rules>
        <rule name="Test redirect" enabled="false" stopProcessing="true">
            <match url=".*" />
        <action type="Redirect" url="/pub/" appendQueryString="false" logRewrittenUrl="true" redirectType="Permanent" />
            <conditions logicalGrouping="MatchAny">
                <add input="{HTTP_HOST}" pattern="^mydomain.*(com|net)$" />
            </conditions>
        </rule>
    </rules>
</rewrite>
  • 该规则位于wwwroot文件夹web.config文件中。
  • 规则重定向到wwwroot / pub /文件夹中的MVC应用程序。
  • IIS日志显示在循环中多次调用/ pub /文件夹,直到IIS终止请求。
  • 如果规则被禁用,我直接输入网址就可以了。
  • 在不同的浏览器上看到相同的错误。
  • 这不是浏览器缓存问题。

                                                                                                

3 个答案:

答案 0 :(得分:1)

问题证明与SSL有关。 HTTPS重定向需要{HTTPS}条件,如下所示。如果没有这种情况,当您尝试重定向到https:\ URL时,规则将循环。您还必须在操作中包含整个https:\ URL,如图所示。

<rule name="Test redirect" enabled="true" stopProcessing="true">
    <match url=".*" />
    <action type="Redirect" url="https://yourdomain.com/pub/" appendQueryString="false" logRewrittenUrl="true" redirectType="Temporary" />
    <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="^yourdomain.*(com|net)$" />
        <add input="{HTTPS}" pattern="off" />
    </conditions>
</rule>

答案 1 :(得分:0)

您的网址重定向规则似乎被多次点击,因为它通过<match url=".*" />指令在所有网址上匹配。 This post says that stopProcessing='true'指令并不一定适用于重定向规则。

Taking a look at a similar question,您可能需要先添加block规则,以防止任何包含片段mydomain.com/pub的网址触发任何重写规则并进入无限循环场景:

<rule name="block" stopProcessing="true">
    <match url="^mydomain.*(com|net)/pub.*" />
    <action type="None" />
</rule>

答案 2 :(得分:0)

您可以查看代码吗,所有路径都应为绝对路径,例如...脚本

js / jquery.js是错误的路径。正确的路径是/js/jquery.js