的.htaccess - 的ErrorDocument VS重写规则(.htaccess - Er

2019-08-19 06:59发布

我要为丢失的文件和目录无效请求重定向到一个自定义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其他?

Answer 1:

重写规则将不会返回正确的状态码。 这意味着浏览器将看到您的自定义错误页,但响应代码仍然是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自然的方式。



文章来源: .htaccess - ErrorDocument vs RewriteRule