htaccess 不起作用,失败,如果输入的 URL 包含斜杠空格斜杠。 "site.com/ /"



我想对所有错误使用自定义错误页面,这样访问者就不可能看到错误页面中内置的服务器。但我似乎发现了一个我无法克服的故障。

问题是,如果访问者错误地键入了两个斜杠之间只有空格的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>

由于我永远不会在现场使用它,因此可以忽略这个问题。

感谢响应者。

最新更新