我有一个在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 - 显然不存在。
有谁知道我在这里做错了什么?
答案 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
。