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

时间:2016-07-09 18:25:05

标签: .htaccess redirect mod-rewrite

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

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

我意识到这个错误并不常见。但它可能发生,我正在努力了解正在发生的事情以及如何阻止它。

2 个答案:

答案 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>

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

感谢响应者。