我正在处理的网站(IIS8上的.Net 4.0和VS2010)使用单个规则将所有传入的网址重写为单个"中存在的.aspx网页。 /页/"夹。例如," www.site.com/hello"被重写为" /pages/hello.aspx"。
目前的重写规则是:
<rule name="pages" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^([a-z0-9_-]+(?:/[a-z0-9_-]+)*)/?$"/>
<action type="Rewrite" url="/pages/{R:1}.aspx" appendQueryString="true" />
</rule>
这很好用,但是当我满足以下任一条件时,我很难实现自定义404重定向:
a)正则表达式中定义的url格式不匹配(即未遵守严格的url格式),或
b)匹配url正则表达式,但是对url="/pages/{R:1}.aspx"
的重写不存在(例如,url是&#34; / pages&#34;但是物理文件&#34; / pages / hello。 aspx&#34;不存在)。
这可以用重写规则来完成吗?
答案 0 :(得分:0)
发现stopProcessing="false"
的目的。 :)
可以在下一个规则中进一步测试重写的URL,如果它最终没有指向现有文件,则重定向到404页面。工作代码是:
<rule name="pages" patternSyntax="ECMAScript" stopProcessing="false">
<match url="^([a-z0-9_-]+(?:/[a-z0-9_-]+)*)/?$"/>
<action type="Rewrite" url="/pages/{R:1}.aspx" appendQueryString="true" />
</rule>
<rule name="404" patternSyntax="ECMAScript" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="pages/Error404.aspx" />
</rule>