mod_rewrite:不能访问真实文件和目录

use*_*217 1 apache .htaccess mod-rewrite

我对漂亮的URL使用mod_rewrite / .htaccess。我将所有请求转发到我的index.php,如下所示:

RewriteRule ^ /?([a-zA-Z0-9 /-] +)/?$ /index.php [NC,L]

然后index.php处理请求。

我还使用此条件/规则来消除斜杠(或使用301重定向将其重写为没有斜杠的URL;我这样做是为了避免重复的内容,因为我不喜欢斜杠更好):

RewriteCond%{HTTP_HOST}!^ \。localhost $ [NC]
RewriteRule ^(。+)/ $ http://%{HTTP_HOST} / $ 1 [R = 301,L]

这很好用,除了我现在尝试访问一个(真实)目录时遇到一个无限循环(重写规则删除了尾部斜杠,服务器再次添加了斜杠,...)。

我通过将DirectorySlash指令设置为来解决此问题Off

目录斜杠

我不知道这种解决方案有多好,我对此不太有信心。

无论如何,我想做的就是完全忽略“真实的”文件和目录,因为我不需要它们,并且无论如何,我只使用带有“虚拟”文件/目录的漂亮URL。这将使我也避免了DirectorySlash变通方法/破解。

这可能吗?

谢谢!

Max*_*Ruf 5

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

代码:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。