Ошибка сервера при перезаписи мода с пропуском правил

StackOverflow https://stackoverflow.com/questions/928988

  •  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"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top