Wyszukiwanie w witrynie

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!