Мод Переписать Пропустить Правила Сервера Ошибка - PullRequest
0 голосов
/ 30 мая 2009

Следующий код дает мне внутреннюю ошибку сервера, и я не могу определить, почему.

RewriteEngine On
SetEnv APPLICATION production
RewriteCond %{ENV:APPLICATION} =production
RewriteRule ^.*$ - [S=1] 
RewriteRule ^(.*)$ html/$1.html

Все, что нужно сделать, это взять URL

/test

и включите ссылку

/html/test.html

негласно, но только если среда является производственной, что устанавливается SetEnv

Ответы [ 4 ]

1 голос
/ 30 мая 2009

Может быть, мой переписанный мод ржавый, но если я это понимаю, кажется, что это противоположно тому, что вы говорите. Если приложение является производственным, то оно не будет переписывать URL (и оно пропускает правило, которое будет). Я не вижу ничего, что могло бы вызвать внутреннюю ошибку сервера.

Чтобы сделать то, что вы говорите, вам нужно что-то вроде:

RewriteEngine On
SetEnv APPLICATION production
RewriteCond %{ENV:APPLICATION} !=production
RewriteRule ^.*$ - [S=1] 
RewriteRule ^(.*)$ html/$1.html

Если у вас все еще есть проблемы, проверьте журнал ошибок apache, в котором содержится лучшая информация для внутренней ошибки сервера 500

0 голосов
/ 30 мая 2009

Вы должны поместить кавычки вокруг строки, чтобы правильно сравнить ее

RewriteCond %{ENV:APPLICATION} !="production"
0 голосов
/ 30 мая 2009

Включите ведение журнала перезаписи мод, чтобы получить полезные ошибки.

RewriteLog rewrite_log
ReWriteLogLevel 2

Настройка уровня записи для многословия.

0 голосов
/ 30 мая 2009

Либо сделайте это, как сказал Тодд Гарднер, либо удалите избыточное правило и свяжите условие со вторым правилом:

RewriteEngine On
RewriteCond %{ENV:APPLICATION} =production
RewriteRule ^(.*)$ html/$1.html

Кроме того, я бы вместо этого использовал это правило, чтобы избежать рекурсии:

RewriteCond %{ENV:APPLICATION} =production
RewriteRule !^html/ html%{REQUEST_URI}.html
...