0

我目前在我的 .htaccess 中使用以下代码:我有 (A|B) 因为我有 A.php、B.php、/A 和 /B,所以我希望 URL 在 /A 时重定向到 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/、/site/index 和/site/index.php,但我无法使用/site 访问,因为它给了我403 错误。我在其他 SO 问题上看到,使用 DirectorySlash Off 它会跳过 /site。

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

我问这个是因为当 DirectorySlash 打开时,我可能会尝试 /site/A?id=824 并且 URL 将变为 /site/A/?id=824。

4

1 回答 1

2

It's probably because you have autoindexes turned off, so if you try to access a directory without the trailing slash, it tries to list the contents of the directory and returns a 403 instead because it's not allowed to auto index.

Turning directory slash off means if someone goes to /site without the trailing slash, you get a list of contents of the /site directory, and not the index file (e.g. /site/index.php). This is why Directory Slash exists.

Instead of stripping off the slash, you'll have to check for the slash and remove it at the same time you're checking for the php file:

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

And don't turn off DirectorySlash.

于 2013-09-17T04:23:47.267 回答