Это правда, что вы можете изменять форматы, не назначая объект. Но это не то поведение, на которое вы можете положиться. Это нежелательный дизайн;) и должен быть исправлен в следующих версиях, чтобы было безопаснее присвоить результат, если вы хотите, чтобы ваш код работал с будущими версиями.
Добавьте, что это правило выше Вашего существующего переписывает правила прекратить перенаправлять, если запрос был уже перенаправлен однажды (касательно):
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
Вы могли проверить строку запроса на то, что первоначально требовали:
RewriteCond %{THE_REQUEST} ^[A-Z]+\ (/[^\ ]*)\.php[?\ ]
RewriteRule \.php$ %1 [R=301,L]
О, и первый аргумент RewriteCond
директива не является регулярным выражением, но просто строкой. Так выход .
является неправильным.
Есть какая-то причина, по которой вы не можете использовать символ завершения строки, $?
RewriteRule ^/(.+)\.php$ /$1
перенаправит /page.php на / page, но не будет выполнять перенаправление на / page.
По сути, использование таких приемов, как установка переменных среды и добавление проверок для REDIRECT_STATUS, не будет очень надежным.