可能重复:
iis 7.5 hijacking 404
我在IIS 7.5上运行.net 4.0站点。
我已将自定义错误部分添加到我的webconfig:
<system.web>
<customErrors defaultRedirect="/error" mode="On">
<error statusCode="404" redirect="/error?code=404"/>
<error statusCode="500" redirect="/error?code=500"/>
</customErrors>
</system.web>
自定义错误正在运行。任何内部服务器错误都会重定向到/error?code=500
,当找到缺失参数时,任何throw new HttpException(404, "Not found")
都会重定向到/error?code=404
。但是任何不存在的url路径仍会抛出标准的IIS 404页面,而不是我的自定义404。
任何提示?
答案 0 :(得分:2)
在IIS 7中发生过这种情况,解决方案是配置IIS-Application错误页面:
在我的案例中,这就是诀窍
请记住,customErrors
部分仅针对ASP.Net处理的请求工作静态请求(如html网页)仍会重定向到IIS中配置的404错误页面
但是,您可以在自己的配置文件中覆盖此行为:
<configuration>
<system.webServer>
<httpErrors existingResponse="Replace" errorMode="Custom">
<remove statusCode="404"/>
<error statusCode="404" path="GenericError.aspx" responseMode="Redirect" />
</httpErrors>
</system.webServer>
</configuration>
您还可能需要将上一部分标记为可更新:
打开文件:
C:\Windows\System32\inetsrv\config\applicationHost.config
并改变:
<section name="httpErrors" overrideModeDefault="Deny" />
致:
<section name="httpErrors" overrideModeDefault="Allow" />
答案 1 :(得分:0)
您可以在Global.asax或IHttpModule中处理它。
Exception currentException = Server.GetLastError();
HttpException httpException = currentException as HttpException;
if (httpException != null && httpException.GetHttpCode() == 404)
{
// redirect
}
检查http://learn.iis.net/page.aspx/508/wildcard-script-mapping-and-iis-integrated-pipeline/以获取有关如何设置通配符映射的信息,因此所有请求都由asp.net处理。