.htaccess DirectorySlash Off导致“/”无法访问

时间:2013-09-17 04:08:12

标签: apache .htaccess mod-rewrite

我目前在.htaccess中使用以下代码: 我有(A | B)因为我有A.php,B.php,/ A和/ B所以我希望在调用/ A时URL重定向到A.php。

RewriteEngine On
DirectorySlash Off

RewriteCond %{REQUEST_FILENAME} (A|B)/$
RewriteRule ^(.*)/$ $1

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

然而,

DirectorySlash Off

如果没有尾部斜杠,我无法访问我的根目录。例如 如果我有目录/站点下的文件,我可以访问/ site /,/ site / index和/site/index.php但我无法使用/ site访问,因为它给我403错误。我在其他SO问题上看到,使用DirectorySlash Off它会跳过/站点。

有没有办法编写规则,使其适用于除root / site之外的所有文件/目录? 如果没有,是否有办法删除涉及.php文件的URL的尾部斜杠?

我问这个是因为当DirectorySlash开启时,我可以尝试/ site / A?id = 824,URL将变为/ site / A /?id = 824。

1 个答案:

答案 0 :(得分:2)

这可能是因为您关闭了自动索引,因此如果您尝试访问没有尾部斜杠的目录,它会尝试列出目录的内容并返回403,因为它不允许自动索引。

关闭目录斜杠意味着如果有人在没有尾部斜杠的情况下转到/site,则会获得/site目录的内容列表,而不是索引文件(例如/site/index.php) 。这就是Directory Slash存在的原因。

不是剥掉斜杠,而是在检查php文件的同时检查斜杠并将其删除:

RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]

不要关闭DirectorySlash。