Jak wykonać przekierowanie wewnętrzne za pomocą mod_rewrite w Apache
W tym i następnym artykule wyjaśnimy, jak używać mod_rewrite do mapowania niektórych żądań HTTP na inne strony w witrynie lub na zewnętrzny adres URL.
Innymi słowy, ten dobrze znany moduł Apache pozwoli Ci przekierować adres URL na inny, co zilustrujemy praktycznymi przykładami.
Sugerowana lektura: 5 wskazówek pozwalających zwiększyć wydajność serwera internetowego Apache
UWAGA: w poniższych przykładach założono, że przynajmniej w pewnym stopniu znasz wyrażenia regularne zgodne z Perlem (PCRE). Ponieważ ten temat wykracza poza zakres tego artykułu, więcej szczegółów na temat PCRE można znaleźć w dokumentacji Perla 5 w wersji 24.0.
Przed kontynuowaniem upewnij się, że moduł przepisywania jest załadowany. Chociaż jest to domyślne zachowanie w CentOS i podobnych dystrybucjach, w Debianie i jego pochodnych konieczne będzie załadowanie go ręcznie w następujący sposób:
a2enmod rewrite
Konfigurowanie Apache do korzystania z modułu mod_rewrite
Dla uproszczenia użyjmy domyślnej witryny w polu CentOS 7 (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ł korzystać z tego modułu, dodaj następującą linię do pliku konfiguracyjnego:
RewriteEngine on
Należy pamiętać, że ta konfiguracja nie będzie dziedziczona przez hosty wirtualne w tym samym urządzeniu.
Dlatego będziesz musiał dodać RewriteEngine dla każdego wirtualnego hosta, na którym chcesz używać reguł przepisywania.
Przekierowanie wewnętrzne: mapowanie adresu URL na inny w tym samym hoście wirtualnym
Wewnętrzne przekierowanie jest najprostszym przykładem mod_rewrite. Jeśli chcesz przekierować wszystkie żądania dotyczące default.aspx do index.html, dodaj następujący wiersz (znany również jako reguła przepisywania) w obszarze RewriteEngine na:
RewriteRule "^/default\.aspx$" "/index.html"
i nie zapomnij zrestartować Apache, aby zmiany zaczęły obowiązywać.
Może się to przydać, jeśli Twoja witryna została pierwotnie zaprojektowana przy użyciu ASP, a później została zmieniona na zwykły HTML5. Wyszukiwarki będą indeksować plik .aspx
, ale ten plik już nie istnieje.
W takim przypadku musisz znaleźć sposób na przekierowanie żądania, aby potencjalni odwiedzający nie trafili na stronę błędu. Aby przetestować, utwórzmy prosty plik HTML o nazwie index.html
w /var/www/html z następującą zawartością:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>New site</title>
</head>
<body>
<h2>Default.aspx was here, but now it's index.html</h2>
</body>
</html>
Znaki daszek i dolar spowodują, że wyrażenie regularne będzie pasować do dowolnego ciągu znaków zaczynającego się od /default
i kończącego się na .aspx
odpowiednio.
Sugerowana lektura: Zainstaluj Mod_Pagespeed, aby zwiększyć wydajność Apache nawet 10-krotnie
Teraz uruchom przeglądarkę i wskaż ją na 192.168.0.100/default.aspx. Jeśli wszystko pójdzie zgodnie z oczekiwaniami, Apache powinien zamiast tego wyświetlać plik index.html
.
Jednak użytkownik końcowy nadal będzie widział default.aspx
na pasku adresu, co spowoduje, że zmiana będzie całkowicie przezroczysta:
Jeśli chcesz, aby adres URL w pasku adresu wskazywał, że serwer faktycznie obsługuje index.html
zamiast strony o nazwie default.aspx
, dodaj [R, L]
na koniec reguły przepisywania w następujący sposób:
RewriteRule "^/default\.aspx$" "/index.html" [R,L]
Tutaj [R,L]
znajdują się dwie opcjonalne flagi, które wskazują, że do przeglądarki (R)
powinno zostać wysłane pełne przekierowanie HTTP i że nie należy przetwarzać żadnych dalszych reguł:
Zwróć uwagę, że pasek adresu pokazuje teraz index.html
, zgodnie z oczekiwaniami, zamiast default.aspx
, jak miało to miejsce wcześniej.
Streszczenie
W tym artykule wyjaśniliśmy, jak używać mod_rewrite do wykonywania wewnętrznego przekierowania. Czekajcie na kolejny post, w którym dowiemy się jak przekierować do zasobu, który został przeniesiony na inny serwer oraz jak wyświetlić niestandardową treść w oparciu o przeglądarkę użytkownika. Do tego czasu zapoznaj się z dokumentacją Apache 2.4, aby uzyskać pełną listę dostępnych flag przepisywania.
Jak zawsze, jeśli masz jakiekolwiek pytania lub uwagi dotyczące tego artykułu, możesz skorzystać z poniższego formularza komentarza. Oczekujemy na kontakt zwrotny!