我希望对丢失文件和无效目录的请求重定向到自定义的404错误页面。我相信这可以用两种方法来完成。
# redirect invalid requests and missing files to the not-found page
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.example.com/not-found.html [L]
# same idea but using error document
ErrorDocument 404 /not-found.html其中一个选项比另一个更好吗?什么时候我想使用一个而不是另一个呢?
发布于 2013-04-04 03:41:39
重写规则不会返回正确的状态代码。这意味着浏览器将看到您的自定义错误页面,但响应代码仍然是200,并且浏览器(或任何与服务器对话的客户端)将认为特定的错误请求实际上是一个好请求。
ErrorDocument语句将显示自定义错误页面,但也将返回404响应代码,让浏览器(或任何客户端)知道在服务器上找不到它所请求的内容。
请注意,mod_rewrite有一个R标志,您可以为其提供响应代码:
RewriteRule ^(.*)$ /not-found.html [L,R=404]这将返回404响应代码,但不会显示/not-found.html页面。如果您使用ErrorDocument语句,它将显示自定义错误文档:
RewriteRule ^(.*)$ - [L,R=404]
ErrorDocument 404 /not-found.html重写规则将强制404,其目标基本上被忽略,然后ErrorDocument确保提供自定义错误页面以及正确的404响应。
所以你想要ErrorDocument,几乎总是这样。要注意的另一件事是,在URI到文件的映射管道中,与ErrorDocument相比,mod_rewrite位于不同的位置。如果你依赖于mod_rewrite来决定什么应该是404,什么不应该是404,那么它很可能会受到后面可能出现的其他模块(比如mod_proxy )的影响。
需要明确的是,在URL- To -file映射管道以“ not found”结束(即404)后使用ErrorDocument,然后自定义错误文档语句ErrorDoucment 404将提供自定义错误页面,而不是默认错误页面。当您像在问题中那样使用mod_rewrite时,它完全绕过了管道到达404的自然方式。
https://stackoverflow.com/questions/15792356
复制相似问题