【问题标题】:How to display custom 404 page when rewrite <action url=".."> points to missing file?重写 <action url=".."> 指向丢失文件时如何显示自定义 404 页面?
【发布时间】:2018-02-03 05:39:18
【问题描述】:

我正在处理的站点(IIS8 上的 .Net 4.0 和 VS2010)使用单个规则将 所有 传入 URL 重写为存在于单个“/pages/”文件夹中的 .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 为“/pages”但物理文件“/pages/hello.aspx”不存在)。

这可以通过重写规则来实现吗?

【问题讨论】:

    标签: asp.net url-rewriting custom-error-pages


    【解决方案1】:

    发现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>
    

    【讨论】:

      猜你喜欢
      • 2011-11-17
      • 2019-09-14
      • 2013-12-01
      • 1970-01-01
      • 2018-01-05
      • 2013-08-13
      • 2012-10-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多