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

Posted

技术标签:

【中文标题】mod_rewrite:无法访问真实文件和目录【英文标题】:mod_rewrite: no access to real files and directories 【发布时间】:2011-03-05 07:25:43 【问题描述】:

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

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

index.php 然后处理请求。

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

RewriteCond %HTTP_HOST !^\.localhost$ [NC]
重写规则 ^(.+)/$ http://%HTTP_HOST/$1 [R=301,L]

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

我通过将DirectorySlash 指令设置为Off 解决了这个问题:

DirectorySlash Off

我不知道这个解决方案有多好,我对它不太自信。

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

这可能吗?

谢谢!

【问题讨论】:

【参考方案1】:

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

代码:

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d

我希望这会有所帮助。

【讨论】:

以上是关于mod_rewrite:无法访问真实文件和目录的主要内容,如果未能解决你的问题,请参考以下文章

例外:空。 flutter工具无法访问文件或目录

PHP写的页面无法访问,报HTTP500错误,这个是怎么回事

Apache Rewrite(mod_rewrite)无法重写,如果目录名与root下的另一个目录相同,例如Linux上的“lib”

启用mod_rewrite的Chevereto安装

如何调试 mod_rewrite 规则?

利用htaccess实现隐藏真实地址