非aspx页面的404重定向
Posted
技术标签:
【中文标题】非aspx页面的404重定向【英文标题】:404 Redirecting for non aspx pages 【发布时间】:2012-06-18 05:34:06 【问题描述】:我正在使用下面的 web.config 代码将对丢失页面的请求重定向到 404 错误处理页面:
<customErrors mode="On" defaultRedirect="404.aspx" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="404.aspx"/>
</customErrors>
当我查找诸如“missing.aspx”之类的页面时它可以正常工作,但它不适用于没有“.aspx”扩展名的页面,例如“missing.asp”或只是“missing”。当它不起作用时,它只会加载一个标准的 IIS 7.5 错误页面。
我做错了什么?我正在使用 .net 4。我注意到其他人问了同样的问题,但他们没有得到答案。
谢谢!
【问题讨论】:
尝试删除redirectMode="ResponseRewrite"
我尝试使用此问题中的信息,但未能成功。请您看一下***.com/questions/25798775/…
这对我有用 我有一个网站项目***.com/a/48661494/6665876
【参考方案1】:
将以下内容添加到 Web.config:
<system.webServer>
<httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" >
<remove statusCode="404" />
<error statusCode="404" path="/Default.aspx" responseMode="Redirect" />
</httpErrors>
</system.webServer>
我取了Osprey的代码,并添加了responseMode="Redirect"来解决只显示页面源代码的问题。
【讨论】:
【参考方案2】:正如dbaseman 所说,这是因为非asp.net 文件不会调用asp.net 处理程序。强制 asp.net 处理程序对所有请求进行操作的一种简单方法是在 web.config 中设置以下内容。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</system.webServer>
这告诉 IIS 为所有请求(例如 .html、.jpg、.css、.js 等)运行所有托管模块。这通常不受欢迎,因为它只会引入额外的处理和延迟。
http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx
另一个尝试的选项(比上面更干净)作为答案发布在这里:https://***.com/a/6661699/701062
【讨论】:
我尝试使用您写的内容,但无法正常工作。你介意看看***.com/questions/25798775/… 我爱你...非常喜欢 Gary S.【参考方案3】:原因是非 ASPX 扩展永远不会进入 ASP.NET 处理程序;您看到的那些错误来自 IIS。在 web.config 的 system.webServer 下有一个单独的部分 httpErrors,您需要对其进行配置以处理这些错误。请参阅here 了解更多信息。
链接示例:
<configuration>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" >
<remove statusCode="500" />
<error statusCode="500"
prefixLanguageFilePath="C:\Contoso\Content\errors"
path="500.htm" />
</httpErrors>
</system.webServer>
</configuration>
【讨论】:
我添加了下面的代码,但现在不是运行错误处理页面,而是显示页面的源代码(尝试加载不存在的非 aspx 页面时)。<system.webServer> <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" > <remove statusCode="404" /> <error statusCode="404" path="404.aspx" /> </httpErrors> </system.webServer>
这是更好的答案,因为它不依赖于通过 ASP.NET 管道发送所有请求。 @Osprey - 这是因为errorMode被设置为“DetailedLocalOnly”这个设置说,嘿,如果请求来自托管文件的机器,请提供一些详细信息,否则,显示我定义的500页面。这在调试场景中很有用。您可以将此设置更改为“自定义”,它将始终显示友好的错误消息。
这不起作用。当问题专门针对 404 错误时,您为什么要添加 505?
@JGallardo 不能在本地工作,但应该可以在服务器上工作。我假设您可以找到/替换“404”,或者这对您来说太多了吗?
@McGarnagle 我显然用 404 替换了。然后我将它添加到远程服务器但仍然没有工作。以上是关于非aspx页面的404重定向的主要内容,如果未能解决你的问题,请参考以下文章
使用 301 重定向重定向 404 是将现有页面重定向到主页
react嵌套路由(多重路由)重定向,重定向到404页面,路由重定向