我尝试了在网络上找到的各种方法(包括一些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>
我尝试将此设置应用于多个应用程序,但我得到了相同的结果。我没有的是另一台要测试的服务器。
答案 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" />