我在.htaccess文件里面添加了如下内容:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
然后当我输入http://127.0.0.5/Style/main/本兮 (http://127.0.0.5/Style/main/%... )进行访问时,出现了apache自带的404页面,但把后面的“本兮”换成其他汉字时访问是正常的!!!
经过我的排查,发现只要访问所用的汉字的url编码中含有“%85%AE”就会导致404!!!
我还发现了另外一个神奇的BUG:当访问http://127.0.0.5/兮 (http://127.0.0.5/%E5%85%AE )时,服务器报404 Object not found,,,
但是当访问
http://127.0.0.5/%85%AE
http://127.0.0.5/%85
http://127.0.0.5/%AE
服务器会报403 Access forbidden
这是怎么回事???
Apache的Rewriter是Apache项目中用来对HTTP请求进行解析并生成HTTP响应的部分。在Apache中,Rewriter是通过一个名为RewriteEngine的Java类来实现的。
如果你想让Apache的Rewriter失效,你需要禁用这个类。在Apache配置文件中,你可以在httpd.conf
文件中添加以下行:
xml
<IfModule !mod_rewrite.c>
<Directory /path/to/your/httpd/>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</IfModule>
这段代码的意思是,如果你的Apache服务器没有启用RewriteEngine,那么这个配置文件将被应用。/path/to/your/httpd/
是你要启用RewriteEngine的目录的路径。
请注意,启用RewriteEngine并不意味着你的Apache服务器将启用任何特定的Rewrite规则。它只是告诉Apache在解析请求时,如果发现RewriteEngine已被启用,那么应该使用RewriteEngine生成的规则。