gpt4 book ai didi

.htaccess - ErrorDocument 与 RewriteRule

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:27:12 30 4
gpt4 key购买 nike

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

# 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

一种选择比另一种更好吗?我什么时候想使用一个与另一个?

最佳答案

重写规则不会返回正确的状态代码。这意味着浏览器将看到您的自定义错误页面,但响应代码仍将是 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 与 RewriteRule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15792356/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com