Jak wykonać wewnętrzne przekierowanie za pomocą mod_rewrite w Apache

Jak wykonać wewnętrzne przekierowanie za pomocą mod_rewrite w Apache

W tym artykule i następnym wyjaśnimy, jak używać mod_rewrite, aby zmapować niektóre żądania HTTP na inne strony na stronie internetowej lub na zewnętrzny adres URL.

Innymi słowy, ten znany moduł Apache pozwoli ci przekierować adres URL do innego, który ilustrujemy na podstawie praktycznych przykładów.

Sugerowane przeczytanie: 5 wskazówek, aby zwiększyć wydajność serwera WWW Apache

NOTATKA: Poniższe przykłady zakładają, że przynajmniej jesteś trochę zaznajomiony Perl kompatybilne wyrażenia regularne (PCRE). Ponieważ ten temat jest poza zakresem tego artykułu, patrz Perl 5 wersja 24.0 dokumentów, aby uzyskać więcej informacji na temat PCRE.

Przed kontynuowaniem upewnij się, że moduł przepisywania jest ładowany. Chociaż jest to domyślne zachowanie w Centos i podobne rozkłady, w Debian i pochodne, które będziesz musiał załadować go ręcznie w następujący sposób:

# a2enmod przepisanie 

Konfigurowanie Apache do użycia modułu mod_rewrite

Dla uproszczenia użyjmy witryny domyślnej w Centos 7 skrzynka (IP 192.168.0.100) Aby wyjaśnić, jak używać mod_rewrite (DocumentRoot: /var/www/html, plik konfiguracyjny: /etc/httpd/conf/httpd.conf).

Aby Apache mógł użyć tego modułu, dodaj następujący wiersz do pliku konfiguracyjnego:

RewriteEngine on 

Należy zauważyć, że ta konfiguracja nie będzie odziedziczona przez wirtualne hosty w tym samym polu.

W ten sposób będziesz musiał dodać RewriteEngine dla każdego wirtualnego hosta, w którym chcesz używać reguł przepisywania.

Wewnętrzne przekierowanie: Mapowanie adresu URL na inny w tym samym wirtualnym hoście

Wewnętrzne przekierowanie jest najprostszym przykładem mod_rewrite. Jeśli chcesz przekierować wszystkie prośby o domyślny.ASPX Do indeks.html, Dodaj następujący wiersz (znany również jako reguła przepisywania) poniżej RewriteEngine NA:

Reriverule "^/default \.ASPX $ ""/indeks.html " 

I nie zapomnij ponownie uruchomić Apache, aby zmiany w obronie.

Może się to przydać, jeśli Twoja witryna została pierwotnie zaprojektowana ŻMIJA a później zmienił się na zwykłe HTML5. Wyszukiwarki będą miały .ASPX indeksowany plik, ale ten plik już nie istnieje.

W takim przypadku musisz znaleźć sposób na przekierowanie żądania, aby potencjalni goście nie wpadli na stronę błędu. Aby przetestować, utwórzmy prosty plik HTML o nazwie indeks.html wewnątrz /var/www/html Z następującymi treściami:

    Nowa strona   

Domyślny.ASPX był tutaj, ale teraz jest indeks.html

wstawka korektorska I dolar Znaki spowodują, że wyrażenie regularne pasuje do dowolnego ciągu zaczynającego się od /domyślny i kończąc z .ASPX, odpowiednio.

Sugerowane przeczytanie: Zainstaluj mod_pagespeed, aby przyspieszyć wydajność Apache do 10x

Teraz uruchom swoją przeglądarkę i wskazuj 192.168.0.100/Domyślnie.ASPX. Jeśli wszystko pójdzie zgodnie z oczekiwaniami, Apache powinien służyć indeks.html Zamiast.
Jednak użytkownik końcowy nadal zobaczy domyślny.ASPX na pasku adresu powodującym całkowicie przejrzystą zmianę:

Mapowanie adresu URL na drugą stronę na domenie

Jeśli chcesz, aby adres URL na pasku adresu pokazał, że serwer, który faktycznie obsługuje indeks.html Zamiast strony nazwanej domyślny.ASPX, dodać [R, l] do końca zasady przepisywania w następujący sposób:

Reriverule "^/default \.ASPX $ ""/indeks.html "[r, l] 

Tutaj [R, l] są dwiema opcjonalnymi flagami, które wskazują, że do przeglądarki należy wydać kompletne przekierowanie HTTP (R) i że żadne dalsze zasady nie powinny być przetwarzane:

Mapowanie adresu URL na rzeczywistą stronę indeksu

Zwróć uwagę, jak pokazuje teraz pasek adresu indeks.html, zgodnie z oczekiwaniami, zamiast domyślny.ASPX Tak jak wcześniej.

Streszczenie

W tym artykule wyjaśniliśmy, jak używać mod_rewrite do wykonywania wewnętrznego przekierowania. Bądź na bieżąco z następnym postem, w którym dowiemy się, jak przekierować zasob. Do tego czasu patrz Apache 2.4 dokumenty dla pełnej listy dostępnych flag przepisywania.

Jak zawsze możesz użyć poniższego formularza komentarza, jeśli masz jakieś pytania lub opinie na temat tego artykułu. Oczekujemy na kontakt zwrotny!