.htaccess - 是否需要在.htaccess中指定完整的URL?

标签 .htaccess wampserver errordocument

我的.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/

相关文章:

php - 使用android从WAMP服务器存储和检索图像

java - 连接超时 : connect JAVA and Wampserver

.htaccess - 使用位于子目录中的 404 ErrorDocument

apache - 使用 Apache 作为代理服务器 + Tomcat

.htaccess - 将 http 重定向到 https

php - apache .htaccess 重写规则 - 将 example.com/login(/) 重定向到/login.php

java - 使用我的应用程序连接到 php .htaccess

windows - WAMPSERVER 服务器不工作

php - 在不更改 php.ini 的情况下输出 PHP 错误的 STDERR

.htaccess 和针对不同文件类型的自定义 ErrorDocument