2

我有这个htaccess脚本

Options -Indexes
Options +FollowSymlinks

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /$1.php [L,QSA]

所以我可以访问一个页面,example.com/test但是当我尝试访问example.com/test/它时会引发 500 错误。有人可以告诉我需要改变什么才能工作吗?可能是一个愚蠢的错误。

4

1 回答 1

3

将模式从 更改^(.+)$为将分别处理尾部斜杠的模式:^(.*[^/])/?$

Options -Indexes +FollowSymlinks

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])/?$ /$1.php [L,QSA]

这对两者都有效,/test并且/test/- 两者都将被重写为/test.php.

如果你想要不同的行为,有/test工作但有“404 Not Found”错误/test/(而不是愚蠢的“500 服务器端”错误),你可以使用这个:

Options -Indexes +FollowSymlinks

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ $1.php [L]

上面的规则将在进行重写之前检查目标文件是否存在。所以如果/test.php不存在,则不会发生重写。

于 2012-04-20T11:56:11.377 回答