首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.htaccess - ErrorDocument vs RewriteRule

.htaccess - ErrorDocument vs RewriteRule
EN

Stack Overflow用户
提问于 2013-04-04 00:04:07
回答 1查看 15.6K关注 0票数 9

我希望对丢失文件和无效目录的请求重定向到自定义的404错误页面。我相信这可以用两种方法来完成。

代码语言:javascript
复制
# 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

其中一个选项比另一个更好吗?什么时候我想使用一个而不是另一个呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-04 03:41:39

重写规则不会返回正确的状态代码。这意味着浏览器将看到您的自定义错误页面,但响应代码仍然是200,并且浏览器(或任何与服务器对话的客户端)将认为特定的错误请求实际上是一个好请求。

ErrorDocument语句将显示自定义错误页面,但也将返回404响应代码,让浏览器(或任何客户端)知道在服务器上找不到它所请求的内容。

请注意,mod_rewrite有一个R标志,您可以为其提供响应代码:

代码语言:javascript
复制
RewriteRule ^(.*)$ /not-found.html [L,R=404]

这将返回404响应代码,但不会显示/not-found.html页面。如果您使用ErrorDocument语句,它将显示自定义错误文档:

代码语言:javascript
复制
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的自然方式。

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15792356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档