我目前在.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。
答案 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。