我的.htaccess文件中包含以下行,并且可以正常工作。
ErrorDocument 404 http://localhost/error.php?code=404
当我将其更改为以下任何一种时,它将不再起作用(不知道哪个是正确的):
ErrorDocument 404 error.php?code=404
ErrorDocument 404 /error.php?code=404
.htaccess文件和error.php位于同一目录中。为什么会这样呢?
注意:我在Wampserver上
完整的.HTACCESS文件
RewriteEngine on
RewriteRule ^([a-z]+)$ $1.php
ErrorDocument 404 http://localhost/error.php?code=404
最佳答案
这不起作用的原因是由于查询字符串。
当您不提供ErrorDocument
指令的完整URL时,Apache会将其视为相对于DocumentRoot
的本地文件路径。有点令人困惑,即使在技术上是相对路径,您仍需要使用前导/
。
现在,您实际上想要做的并不像看起来那样简单。因为您现在正在处理本地路径,所以查询字符串部分不再具有特殊含义,将被视为文件名的文字部分-显然该文件未称为error.php?code=404
,而仅称为error.php
确实会生成一个内部请求,该请求通过标准路由引擎传递,因此可能会有些混乱。我们这里需要的是ErrorDocument
魔法。
尝试以下方法:ErrorDocument 404 /error-404.php
RewriteEngine On
RewriteRule ^/?error-([0-9]+)\.php$ /error.php?code=$1 [L,QSA]
假设您的.htaccess和error.php文件都位于mod_rewrite
中。
关于.htaccess - 是否需要在.htaccess中指定完整的URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11541160/