我有这个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错误。有人能告诉我需要改变它才能发挥作用吗?可能是一个愚蠢的错误。
答案 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
不存在,则不会重写。