我的 htaccess 文件中有以下规则,用于删除 .php 扩展名并执行 301 重定向到无扩展名的 URL:
# To remove .php extension
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\ (.*)\.php [NC]
RewriteRule ^ %1 [R=301,L]
# To check whether the file exists then set it back internally
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L]
我想要在 PHP 文件上应用以下规则:
RewriteRule ^test/([0-9]+)$ test.php?id=$1 [L]
上述规则会导致 500 内部服务器错误。如果我删除第一组规则,第二组规则将再次生效。因此,这两组规则之间存在一些冲突。
答案1
问题在于规则的顺序:)
当我按如下方式更改顺序时,一切都正常:
RewriteRule ^test/([0-9]+)$ test.php?id=$1 [L]
# To remove .php extension
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\ (.*)\.php [NC]
RewriteRule ^ %1 [R=301,L]
# To check whether the file exists then set it back internally
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L]=