我想为所有错误使用自定义错误页面,这样访问者就无法看到错误页面中构建的服务器。但我似乎发现了一个我无法克服的故障。
问题是如果访问者错误地输入了只有两个斜杠之间的空格的URL,我的环境似乎完全忽略了我的根文件夹htaccess文件,并将用户发送到内置的错误页面。
开发环境是Windows 10上的XAMPP,带有最新的PHP& Apache等。
为了简化问题,我现在正在使用这个HTACCESS文件。
ErrorDocument 404 /statuspage.php
RewriteEngine On
RewriteRule ^ http://example.com [R=302,L]
以上代码应将所有网址重定向到示例网点com。如果在找不到的页面上失败,它至少应该重定向到我的错误页面。 (无论如何,它可能会被捕获并发送到example.com。)
但是当我键入以下任何URL时,我的整个项目都会被忽略,包括HTACCESS文件和XAMPP会抛出自己的404错误页面。
1)www.mysite.com/ /
2)www.mysite.com/ /file.php
3)www.mysite.com/dir/%20/subdir/file.html
Apache用%20替换空格。忽略我的重定向。并显示自己的404页面。
我应该注意,这些错误被重定向得很好。
1)www.mysite.com/ file.php / 2)www.mysite.com/dir/x/file.html
我意识到这个错误并不常见。但它可能发生,我正在努力了解正在发生的事情以及如何阻止它。
答案 0 :(得分:0)
这是因为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]
答案 1 :(得分:0)
经过一些研究,这似乎是我的开发环境特有的问题。
我的错误日志显示错误ID AH00127当我用Google搜索AH00127时,我发现每个帖子都涉及特定设置。
在配置中使用虚拟主机的Windows的XAMPP。 I.E.
<Virtualhost *:80>
由于我永远不会在现场使用它,因此可以忽略这个问题。
感谢响应者。