IIS 7中的URL重写导致重定向循环

时间:2016-02-09 16:30:24

标签: asp.net iis url-rewriting

我尝试了在网络上找到的各种方法(包括一些SO答案),以便在IIS 7中重写URL,以便我可以将mysite.com/somepage.aspx转换为mysite.com/somepage。我尝试的最后一件事是此链接上的视频:https://www.youtube.com/watch?v=bBNJE7XA1m0。在IIS中应用这些更改后,我现在可以请求mysite.com/somepage并在地址栏中删除.aspx后访问mysite.com/somepage.aspx。部分成功。

但是,当我尝试直接请求mysite.com/somepage.aspx时,我会进入重定向循环。我希望我的设置中有一些简单的错误。以下是通过在IIS中进行更改而创建的web.config部分:

<rewrite>
        <rules>
            <rule name="HideAspxExtension">
                <match url="^(.*)$" />
                <conditions logicalGrouping="MatchAny">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    <add input="{REQUEST_FILENAME}.aspx" matchType="IsFile" />
                </conditions>
                <action type="Rewrite" url="{R:0}.aspx" />
            </rule>
            <rule name="RedirectingAspxExtension" stopProcessing="true">
                <match url="^(.*).aspx$" />
                <conditions logicalGrouping="MatchAny">
                    <add input="{URL}" pattern="^(.*).aspx$" />
                </conditions>
                <action type="Redirect" url="{R:1}" />
            </rule>
        </rules>
    </rewrite>

我尝试将此设置应用于多个应用程序,但我得到了相同的结果。我没有的是另一台要测试的服务器。

1 个答案:

答案 0 :(得分:0)

这些是我以前用过的规则:

<rule name="StripAspx">
    <match url="^(.+)\.aspx$" />
    <action type="Redirect" url="{R:1}" redirectType="Permanent" />
</rule>
<!-- Rewrite the .aspx for internal processing-->
<rule name="RewriteASPX" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="{R:1}.aspx" />
</rule>

我能看到的主要区别是:

  • 首先删除.aspx(在重写规则中,订单事项)。这也意味着在这些规则中,stopProcessing指令在重写 .aspx,而不是重定向。
  • 这些没有<add input="{REQUEST_FILENAME}.aspx" matchType="IsFile" />