我刚刚升级到VS2010 / IIS 7.5 / URL Rewrite 2.0。我想要做的事情很简单,但是我真的厌倦了尝试让它自己发挥作用。
我只想要 clean 网址,http://example.com/abc-def.aspx变为http://example.com/abc-def/,有效删除.aspx扩展名并添加尾部斜杠。
我通过使用:
完成了<rule name="Trim aspx for directory URLs">
<match url="(.+)\.aspx$" />
<action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>
工作正常并按预期重定向,但不会拉起页面,所以我认为我需要将它与Rewrite规则结合起来,以便它将干净的URL解析为相应的.aspx页面。
我试图通过使用:
来做到这一点<rule name="Add aspx extension back internally">
<match url="^http://example\.com/(.+)/$" ignoreCase="true" />
<conditions>
<add input="{URL}" matchType="IsDirectory" negate="true" />
<add input="{URL}" pattern=".+/externals/.+" negate="true" />
</conditions>
<action type="Rewrite" url="{R:1}.aspx" />
</rule>
重定向规则有效,但好像内部重写规则不起作用,因为页面没有拉起来。我做错了什么?
答案 0 :(得分:1)
不确定是否有办法网址重写2.0 同时执行这两项操作:
我决定做的是在源代码中的任何地方进行更改以指向.aspx无扩展名的URL,这样就不会有以.aspx结尾的URL发出外部请求。
这让我只需要:
<rule name="Add aspx extension back internally" stopProcessing="true">
<match url="(.+)/$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="{R:1}.aspx" />
</rule>
<rule name="Add trailing slash" stopProcessing="false">
<match url="(.*[^/])$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{URL}" pattern="favicon\.ico" ignoreCase="true" negate="true" />
<add input="{URL}" pattern="\.axd" ignoreCase="true" negate="true" />
</conditions>
<action type="Redirect" url="{R:1}/" />
</rule>