目标
我希望所有缺失页面的URL都能重定向到我的根目录下名为404error.aspx
的404错误页面。
问题
目前只有带有.aspx
的URL才有效。例如,如果您输入4error.aspx
,则会重定向到错误页面。
/404error.aspx?aspxerrorpath=/4error.aspx
背景
我不是 .NET 开发者,所以我接手了这个使用经典的 .aspx
的项目。因此,我没有使用任何微软产品来构建模板或框架。我只是在 Sublime 文本编辑器中编写代码。
我的研究
- 非 aspx 页面 404 重定向 - 那里的答案不完整或者没有用。
- 非 aspx 页面 404 不会附加 aspxerrorpath - 但那与我想要的有些不同。
我查看了很多在 Google 上找到的文章,但没有一个完整的实例能够正常工作。
代码
这是我在 web.config
中开始使用的全部代码:
web.config
<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="~/404error.aspx" />
<globalization
fileEncoding="utf-8"
requestEncoding="utf-8"
responseEncoding="utf-8"
culture="en-US"
uiCulture="de-DE"
/>
</system.web>
</configuration>
我还在Microsoft的这个例子中找到了一个(404error.aspx是我的修改)
http://msdn.microsoft.com/en-us/library/vstudio/bb397417%28v=vs.100%29.aspx
web.config(2)
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<compilation debug="true" />
<!-- Turn on Custom Errors -->
<customErrors mode="On"
defaultRedirect="/404error.aspx">
<error statusCode="404" redirect="/404Error.aspx"/>
</customErrors>
</system.web>
</configuration>
这也无法处理没有.aspx
的页面。
然后我尝试了来自以下网页的示例:
web.config (3)
<?xml version="1.0"?>
<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="~/404error.aspx" />
<error statusCode="404" redirect="~/404error.aspx" />
<globalization
fileEncoding="utf-8"
requestEncoding="utf-8"
responseEncoding="utf-8"
culture="en-US"
uiCulture="de-DE"
/>
</system.web>
<system.webServer>
<httpErrors>
<remove statusCode="401" subStatusCode="-1" />
<remove statusCode="403" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="500" subStatusCode="-1" />
<!-- full url when responsemode is Redirect -->
<error statusCode="401" path="http://foo.com/default.htm" responseMode="Redirect" />
<!-- local relative path when responsemode is ExecuteURL -->
<error statusCode="403" path="~/404error.aspx" responseMode="ExecuteURL" />
<error statusCode="404" path="~/404error.aspx" responseMode="ExecuteURL" />
<error statusCode="500" path="~/404error.aspx" responseMode="ExecuteURL" />
</httpErrors>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
显然我需要为除404页面以外的其他页面更改路径,但我只想测试这些错误。那个最后的web.config
效果更糟。
请问我需要修改什么?我希望得到完整的<configuration>
,因为我经常感到困惑哪些内容应该放在哪里。
编辑1
我看到很多开发者建议将其制作成HTML页面。所以现在我的页面是404.html
,以下是更新后的web.config
:
<configuration>
<system.web>
<customErrors mode="On"
redirectMode="ResponseRewrite">
<error statusCode="404"
redirect="~/404.html"/>
</customErrors>
<globalization
fileEncoding="utf-8"
requestEncoding="utf-8"
responseEncoding="utf-8"
culture="en-US"
uiCulture="de-DE"
/>
</system.web>
<system.webServer>
<httpErrors errorMode="Custom"
defaultResponseMode="File">
<remove statusCode="404"/>
<error statusCode="404"
path="~/404.html"/>
</httpErrors>
</system.webServer>
</configuration>