我将mod_rewrite / .htaccess用于漂亮的网址。我将所有请求转发给我的index.php,如下所示:
RewriteRule ^/?([a-zA-Z0-9/-]+)/?$ /index.php [NC,L]
然后index.php处理请求。
我也正在使用这个条件/规则来消除尾部斜杠(或者更确切地说将它们重写为没有尾部斜杠的URL,使用301重定向;我这样做是为了避免重复内容,因为我不喜欢拖尾斜杠更好):
RewriteCond %{HTTP_HOST} !^\.localhost$ [NC] RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]
这很好用,除了我现在在尝试访问(真实)目录时获得无限循环(重写规则删除尾部斜杠,服务器再次添加它,...)。
我通过将DirectorySlash
指令设置为Off
来解决此问题:
DirectorySlash Off
我不知道这个解决方案有多好,我对此感觉不太自信。
无论如何,我想做的是完全忽略“真正的”文件和目录,因为我不需要它们,而且我只使用带有“虚拟”文件/目录的漂亮URL。这样我就可以避免DirectorySlash
解决方法/黑客攻击了。
这可能吗?
谢谢!
答案 0 :(得分:4)
这是因为您也会覆盖文件和文件夹请求。您应该在规则之前添加新的RewriteCond
,它告诉服务器它应该只重写不存在的项目。
代码:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
我希望这会有所帮助。