我要为丢失的文件和目录无效请求重定向到一个自定义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
是一种选择优于其他? 我什么时候会想使用一个VS其他?
重写规则将不会返回正确的状态码。 这意味着浏览器将看到您的自定义错误页,但响应代码仍然是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
,几乎总是如此。 另外要注意的是,mod_rewrite的是在URI不同的地方文件映射管道比ErrorDocument
。 如果你依靠的mod_rewrite来决定什么应该是404,什么不应该,它可能由可能出现后(比如mod_proxy的,例如)其他模块的影响。
需要明确的是,该ErrorDocument
是URL到文件映射管道后使用最后提出了“资源找不到”(即404),然后将自定义错误文档声明, ErrorDoucment 404
,而是提供了一个自定义错误页的默认的。 当你使用mod_rewrite就像你在你的问题做什么,完全绕开管道到达404自然的方式。