我想对所有错误使用自定义错误页面,这样访问者就不可能看到错误页面中内置的服务器。但我似乎发现了一个我无法克服的故障。
问题是,如果访问者错误地键入了两个斜杠之间只有空格的URL,我的环境似乎完全忽略了我的根文件夹htaccess文件并将用户发送到内置错误页面。
开发环境是Windows 10上的XAMPP,具有最新的PHP和Apache等。
为了将问题简化到它的根源,我现在正在使用这个HTACCESS文件。
ErrorDocument 404 /statuspage.php
RewriteEngine On
RewriteRule ^ http://example.com [R=302,L]
上面的代码应该将任何和所有 URL 重定向到示例 .com。如果在未找到的页面上失败,它至少应该重定向到我的错误页面。(无论如何,它可能会被抓住并发送给 example.com。
但是当我键入以下任何 URL 时,我的整个项目都被忽略了,包括 HTACCESS 文件,XAMPP 会抛出自己的 404 错误页面。
1) www.mysite.com//
2) www.mysite.com//文件.php
3) www.mysite.com/dir/%20/subdir/file.html
Apache 将空格替换为 %20。忽略我的重定向。并显示自己的 404 页面。
我应该注意,这些错误被重定向得很好。
1) www.mysite.com/文件.php/2) www.mysite.com/dir/x/file.html
我意识到这个错误并不常见。但它可能发生,我正在努力理解正在发生的事情以及如何阻止它。
这是因为RewriteRule
指令在ErrorDocument
之前运行。您的规则将所有请求(包括 404)重定向到 http://example.com
。要解决这个问题,你需要用RewriteRule
而不是ErrorDocument
将未找到的请求重定向到/statuspage.php
,将你的ErrorDocument
替换为:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /statuspage.php [L]
经过一些研究,这似乎是我的开发环境特有的问题。
我的错误日志显示错误 ID AH00127当我用谷歌搜索AH00127时,我发现每个帖子都涉及特定的设置。
XAMPP for Windows 在配置中使用虚拟主机。
即 <Virtualhost *:80>
由于我永远不会在现场使用它,因此可以忽略这个问题。
感谢响应者。