mod_rewrite:无法访问真实文件和目录

时间:2010-06-18 07:03:17

标签: apache .htaccess mod-rewrite

我将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解决方法/黑客攻击了。

这可能吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

这是因为您也会覆盖文件和文件夹请求。您应该在规则之前添加新的RewriteCond,它告诉服务器它应该只重写不存在的项目。

代码:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

我希望这会有所帮助。