【问题标题】:Custom 404 page redirect not working in IIS7.5 when missing URL is in a sub-folder当缺少 URL 位于子文件夹中时,自定义 404 页面重定向在 IIS7.5 中不起作用
【发布时间】:2012-01-09 07:57:57
【问题描述】:

我有一个混合了 .html 和 .aspx 页面的站点,该站点在带有 IIS 7.5 的 W2K8 R2 服务器上运行。该站点是对旧站点的重新开发,所有 URL 和大部分内容都已从旧站点更改为新站点。当人们使用旧链接时,我预计会收到大量 404。

我想将 404 错误重定向到自定义页面 (/404.aspx)。这是我的 web.config 的(部分):

  <system.web>
    <customErrors mode="On" redirectMode="ResponseRewrite"> 
      <error statusCode="404" redirect="/404.aspx" />
    </customErrors>
  </system.web>
  <system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" prefixLanguageFilePath="" path="/404.aspx"  
             responseMode="ExecuteURL" />
    </httpErrors>
  </system.webServer>

此站点的应用程序池的托管管道模式是Integrated

此重定向到我的自定义 404.aspx 页面有时运行良好,但有时它只是工作。这些 URL 重定向就好了:

但是,这些类型的 URL(缺少的页面位于子文件夹中)会得到一个奇怪的结果:

子文件夹 URL 发生的情况是我从 404.aspx 页面获取 HTML 标记,但页面无法正确呈现,因为页面中的所有 CSS 和脚本引用都丢失了,我可以从嗅探网络流量中分辨出来,因为 IIS 试图以某种方式将 /folder/ 插入 URL 以获取我的 404.aspx 页面中具有相对路径的资源。例如,我的站点根文件夹中的 404.aspx 页面引用了 css/style.css,但对于 /folder/ 中缺少页面触发的 404 页面,浏览器正在尝试下载:/folder/css/style.css - 其中显然不存在。

有人知道我在这里做错了什么吗?

【问题讨论】:

    标签: asp.net redirect iis-7 web-config http-status-code-404


    【解决方案1】:

    您可以使用绝对路径(从站点根目录的正斜杠开始)来引用样式表:

    <link rel="stylesheet" href="/css/style.css" type="text/css" />
    

    或者您可以使用根相对 URL(以波浪号和正斜杠开头)。如果&lt;link&gt;-元素在&lt;head runat="server"&gt;-元素中,那么根相对 URL 将被转换为正确的客户端相对路径。

    <head runat="server">
      <link rel="stylesheet" href="~/css/style.css" type="text/css" />
    

    对于脚本,您必须自己解析根相对 URL。使用 System.Web.UI.Page 的 ResolveUrl() 方法:

    <script type="text/javascript" src="<%= ResolveUrl("~/scripts/script.js") %>"></script>
    

    或者您可能只需要在配置中将responseMode 设置为redirect

    【讨论】:

    • 对我的 404.aspx 标记中的所有链接使用绝对路径被证明是一个可行的解决方案。在所有 href= 和 src= 引用中添加前导斜杠似乎对样式表、脚本引用、图像和超链接都有效。我从设计师那里得到的标记带有所有与页面相关的 URL。将来我会尝试要求设计师使用适当限定的 URL,但我可能不会屏住呼吸!谢谢@michielvoo!
    猜你喜欢
    • 1970-01-01
    • 2015-03-06
    • 2017-03-12
    • 2011-09-17
    • 2015-04-17
    • 2013-04-26
    • 2019-09-14
    • 2012-10-01
    • 2011-11-17
    相关资源
    最近更新 更多