Różnica między „stałym przekierowaniem” a mod_rewrite RewriteRule

9

To jest serwer Apache httpd 2.2.

Wymagamy, aby dostęp do tego serwera był szyfrowany przez HTTPS.

Kiedy klienci sieci odwiedzają moją witrynę pod adresem http://www.example.org/ $ foo (port 80), chcę przekierować ich żądanie do zaszyfrowanej strony internetowej HTTPS pod adresem https://www.example.org/ $ foo.

Wydaje się, że istnieją dwa typowe sposoby:

Pierwsza metoda wykorzystuje dyrektywę „ Przekierowanie ” z mod_alias:

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

Druga metoda wykorzystuje mod_rewrite:

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

Jaka jest różnica między „stałym przekierowaniem” a zwrotką mod_rewrite. Czy jedno jest lepsze od drugiego?

Stefan Lasiewski
źródło

Odpowiedzi:

8

Domyślnie mod_rewrite dokonuje przekierowań „Znaleziono 302”, które są tymczasowe. Zakładając, że wszystko inne jest równe, Redirect permanentjest równoważne RewriteRule <blah> [R=permanent].

Mark Wagner
źródło
Właściwie nie, Redirectdyrektywa lepiej obsługuje przekierowanie z http na https. Zobacz komentarz Stefana poniżej i sprawdź tę sekcję dokumentacji Apache: httpd.apache.org/docs/current/rewrite/avoid.html#redirect
Gondy
7

Czy jedno jest lepsze od drugiego?

Apache teraz zaleca stosowanie Redirectod mod_aliaszamiast korzystania RewriteRulez mod_rewrite. Zobacz https://httpd.apache.org/docs/current/rewrite/avoid.html#redirect , który mówi:

mod_rewrite należy traktować jako ostateczność, gdy inne alternatywy są poszukiwane. Używanie go, gdy istnieją prostsze alternatywy, prowadzi do konfiguracji, które są mylące, kruche i trudne do utrzymania.

Stefan Lasiewski
źródło
5

Wyszukiwarki zobaczą stałe przekierowanie i odpowiednio zaktualizują swoje indeksy.

MDMarra
źródło
> Czy jedno jest lepsze od drugiego?
Stefan Lasiewski