尾部斜杠导致错误代码500

时间:2012-04-20 11:40:37

标签: apache .htaccess

我有这个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错误。有人能告诉我需要改变它才能发挥作用吗?可能是一个愚蠢的错误。

1 个答案:

答案 0 :(得分: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工作但是有#34; 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不存在,则不会重写。