Разница между «перенаправлением перманента» и mod_rewrite RewriteRule


9

Это сервер Apache httpd 2.2.

Мы требуем, чтобы доступ к этому веб-серверу был зашифрован HTTPS.

Когда веб-клиенты посещают мой сайт по адресу http://www.example.org/ $ foo (порт 80), я хочу перенаправить их запрос на зашифрованный HTTPS-сайт по адресу https://www.example.org/ $ foo.

Кажется, есть два распространенных способа сделать это:

Первый метод использует директиву Redirect из mod_alias:

<VirtualHost *:80>
    Redirect permanent / https://www.example.org/
</VirtualHost>

Второй метод использует mod_rewrite:

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

В чем разница между перманентом Redirect и разделом mod_rewrite. Один лучше другого?

Ответы:


8

По умолчанию mod_rewrite делает перенаправления «302 Найдено», которые являются временными. Предполагая, что все остальное равно, Redirect permanentэквивалентно RewriteRule <blah> [R=permanent].


На самом деле нет, Redirectдиректива лучше обрабатывает перенаправление с http на https. Смотрите комментарий Стефана ниже и проверить этот раздел Apache документации: httpd.apache.org/docs/current/rewrite/avoid.html#redirect
Гонди

7

Один лучше другого?

Apache теперь рекомендует использовать Redirectfrom mod_aliasвместо использования RewriteRulefrom mod_rewrite. См. Https://httpd.apache.org/docs/current/rewrite/avoid.html#redirect , где говорится:

mod_rewrite следует рассматривать в качестве последнего средства, когда найдены другие альтернативы. Использование его при наличии более простых альтернатив приводит к запутанным, хрупким и сложным в настройке конфигурациям.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.