需求:
1.页面的返回404的自定义友好页面
2.返回的404的状态码,通过站长工具查询到的状态码是404,而不是200或者302的状态码
【404设置的情况分析】
1.IIS常规型,对页面不存在的返回404的状态码和404 的友好页面,这里没什么问题,主要是找不到对应的control和action,属于IIS级别的,所以就通过IIS的设置就可以。
2.
伪静态型,而对于伪静态的CMS站点,可能文章的id不存在就会报错了,这种从用户使用的角度而言实际是页面不存在。所以不能返回500的状态码,而应该是404,而且对应的自定义错误页面也是404友好页面。比如,
http://www.daniuxuexiao.org/info/3190.html 原来是可以打开访问,但是后面删除之后,就会报错,返回500的状态码。这种在用户使用的角度应该是页面不存在,这种要处理成返回的状态码是404,用户页面显示404友好页面。这种情况可能有部分程序会在程序里面进行判断处理,可能显示的自定义页面不是符合我们要求的自定义页面(或者说跟IIS设置的不同)。如果有保证404状态码和404友好页面的需求,一般这种需求是CMS站点的SEO需求,如果是使用DTCMS的程序,只需要在article_show的类文件中进行处理即可,对于ID不存在的返回404的StatusCode,再通结合IIS的设置就可以实现需求。
3.IIS设置无效型,在IIS中设置了404和500状态码对应的自定义页面,而且状态码也是404,但是用户打开还是报错页面(.net级别的错误信息),而没有应用IIS设置的对应的自定义页面。
Server Error in '/' Application.
The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.
Requested URL: /htsml.aspx
这里的情况是.net级别的错误,返回是.net的错误页面,无法按照IIS的设置返回按照IIS的设置的自定义页面。.net的错误页面的优先级是IIS的优先级要高的。所以应该在Application_Error中进行处理,返回自定义的友好页面。例如:
其实如果上面的情况都要处理的话,第三中的处理方式就全部涵盖第一种和第二种的情况。所以理想的404设置最终还是要通过Application_Error来实现。
【404状态码的IIS设置】
IIS7 2008 的设置方案
1.删除原来的404的设置,新增新的404设置
这里没什么要求,下面的这两种都可以。
设置成功之后对应正确的webconfig的示范:
<httpErrors errorMode="DetailedLocalOnly">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="404.html" responseMode="File" />
</httpErrors>
错误示范:
<httpErrors errorMode="Detailed" existingResponse="PassThrough">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="404.html" responseMode="File" />
</httpErrors>
注意:如果设置无效果,可以打开webcofig的设置是否正确。
其他注意:
1.IIS上配置404页面设置,错误:由于权限不足而无法写入配置文件,没有administrators的权限,只要补充这个权限即可。