Проблема правил переписывания модов Apache - PullRequest
0 голосов
/ 07 декабря 2011

Я пытаюсь написать правило mod_rewrite для моего сервера apache. Мое требование состоит в том, чтобы у меня было три веб-приложения на сервере, из которых все запросы к схеме HTTP должны быть перенаправлены на HTTPS.

Вот что я написал:

RewriteEngine On

RewriteCond $1 ^abc$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R]

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R]

Кажется, это не работает нормально. Я пытаюсь запустить приложение с корневым контекстом abc для запуска по HTTP и всех других запросов, которые будут перенаправлены на HTTPS URL.

Может кто-нибудь сказать мне, что я делаю не так.

1 Ответ

1 голос
/ 07 декабря 2011

Я вижу пару проблем с вашим первым правилом:

  1. Правило, вероятно, не соответствует, потому что REQUEST_URI равен /abc, а не abc.
  2. Если бы правило соответствовало, у вас был бы бесконечный цикл перенаправления, приводящий к 500 Внутренней ошибке сервера для клиента и ошибке «Превышено ограничение перенаправления» в ваших журналах. Проблема заключается в том, что цель правила идентична исходному запросу, поэтому она войдет в цикл перенаправления.

Я предлагаю избавиться от первого правила и добавить исключение / abc ко второму правилу:

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/abc$ [NC]
RewriteRule $ https://%{HTTP_HOST}%{REQUEST_URI} [L,R]

Если вы также хотите, чтобы / abc работал по HTTP, а не по HTTPS, вы можете добавить второе правило:

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/abc$ [NC]
RewriteRule $ http://%{HTTP_HOST}%{REQUEST_URI} [L,R]
...