Назад | Перейти на главную страницу

Разница между постоянным перенаправлением и mod_rewrite RewriteRule

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

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

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

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

Первый метод использует 'Перенаправить'директива из 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>

В чем разница между разделом «Постоянное перенаправление» и строфой mod_rewrite. Одно лучше другого?

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

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

Apache теперь рекомендует использовать Redirect из mod_alias Вместо того, чтобы использовать RewriteRule из mod_rewrite. Видеть https://httpd.apache.org/docs/current/rewrite/avoid.html#redirect , в котором говорится:

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

Поисковые системы увидят постоянное перенаправление и соответственно обновят свои индексы.