У меня есть следующие правила в моем файле 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. Если я удалю первый набор правил, второе правило снова заработает. Итак, оба набора правил противоречат друг другу.
Проблема в порядке правил :)
Когда я изменил порядок, как показано ниже, все заработало:
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]=