缺少URL时,自定义404页面重定向在IIS7.5中不起作用位于子文件夹中

时间:2011-11-30 01:03:07

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

我有一个在IIS 7.5的W2K8 R2服务器上运行的.html和.aspx页面混合的网站。该网站是旧网站的重新开发,所有网址和大部分内容已从旧网站更改为新网站。当人们使用旧链接时,我希望得到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会发生什么,我从404.aspx页面获取HTML标记,但页面无法正常呈现,因为页面中的所有CSS和脚本引用都丢失了,尽可能接近从嗅探网络流量告诉,因为某种程度上IIS试图将/folder/插入到URL 中,以便在我的404.aspx页面中为相对路径的资源插入。例如,我的网站根文件夹中的404.aspx页面引用了css/style.css,但是对于/ folder /中缺少页面触发的404页面,浏览器正在尝试下载:{{1 - 显然不存在。

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

1 个答案:

答案 0 :(得分:1)

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

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

或者您可以使用根相对URL(以波浪号和正斜杠开头)。如果<link> - 元素位于<head runat="server"> - 元素中,则根相对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