Ошибка сервера при перезаписи мода с пропуском правил
-
06-09-2019 - |
Вопрос
Следующий код выдает мне внутреннюю ошибку сервера, и я не могу определить, почему.
RewriteEngine On
SetEnv APPLICATION production
RewriteCond %{ENV:APPLICATION} =production
RewriteRule ^.*$ - [S=1]
RewriteRule ^(.*)$ html/$1.html
Все, что он должен сделать, это принять URL-адрес
/test
и включите в него ссылку
/html/test.html
за кулисами, но только если среда является производственной, которая задается SetEnv
Нет правильного решения
Другие советы
Возможно, моя переписка мода устарела, но, насколько я понимаю, это, похоже, делает прямо противоположное тому, что вы говорите.Если приложение является производственным, то оно НЕ БУДЕТ переписывать URL (и оно пропускает Правило, которое могло бы это сделать).Однако я не вижу ничего, что могло бы вызвать внутреннюю ошибку сервера.
Чтобы сделать то, что вы говорите, вам понадобится что-то вроде:
RewriteEngine On
SetEnv APPLICATION production
RewriteCond %{ENV:APPLICATION} !=production
RewriteRule ^.*$ - [S=1]
RewriteRule ^(.*)$ html/$1.html
Если у вас все еще возникают проблемы, проверьте журнал ошибок apache, в котором содержится наилучшая информация о внутренней ошибке сервера 500
Либо сделайте это, как сказал Тодд Гарднер, либо удалите избыточное правило и привяжите условие ко второму правилу:
RewriteEngine On
RewriteCond %{ENV:APPLICATION} =production
RewriteRule ^(.*)$ html/$1.html
Кроме того, я бы использовал это правило вместо этого, чтобы избежать рекурсии:
RewriteCond %{ENV:APPLICATION} =production
RewriteRule !^html/ html%{REQUEST_URI}.html
Включите протоколирование перезаписи мода, чтобы получать полезные ошибки.
RewriteLog rewrite_log
ReWriteLogLevel 2
Отрегулируйте уровень детализации журнала.
Вы должны заключить строку в кавычки, чтобы правильно сравнить ее
RewriteCond %{ENV:APPLICATION} !="production"