Vyhledávání na webu

Jak provést interní přesměrování pomocí mod_rewrite v Apache


V tomto a v dalším článku si vysvětlíme, jak používat mod_rewrite, k mapování určitých HTTP požadavků na jiné stránky na webu nebo na externí URL.

Jinými slovy, tento známý modul Apache vám umožní přesměrovat URL na jinou, což si ukážeme na praktických příkladech.

Doporučená četba: 5 tipů, jak zvýšit výkon vašeho webového serveru Apache

POZNÁMKA: Níže uvedené příklady předpokládají, že jste alespoň trochu obeznámeni s Perl Compatible Regular Expressions (PCRE). Protože toto téma je mimo rozsah tohoto článku, další podrobnosti o PCRE naleznete v dokumentu Perl 5 verze 24.0.

Než budete pokračovat, ujistěte se, že je načten přepisovací modul. Ačkoli se jedná o výchozí chování v CentOS a podobných distribucích, v Debianu a odvozeninách jej budete muset načíst ručně následovně:

a2enmod rewrite

Konfigurace Apache pro použití modulu mod_rewrite

Pro jednoduchost použijme výchozí web v poli CentOS 7 (IP 192.168.0.100), abychom vysvětlili, jak používat mod_rewrite ( DocumentRoot: /var/www/html, konfigurační soubor: /etc/httpd/conf/httpd.conf).

Aby Apache mohl používat tento modul, přidejte do konfiguračního souboru následující řádek:

RewriteEngine on

Je důležité si uvědomit, že tato konfigurace nebude zděděna virtuálními hostiteli ve stejném poli.

Proto budete muset přidat RewriteEngine pro každého virtuálního hostitele, kde chcete používat pravidla pro přepis.

Interní přesměrování: mapování adresy URL na jinou ve stejném virtuálním hostiteli

Nejjednodušším příkladem mod_rewrite je interní přesměrování. Pokud chcete přesměrovat všechny požadavky na default.aspx na index.html, přidejte následující řádek (známý také jako pravidlo přepisu) pod RewriteEngine > na:

RewriteRule "^/default\.aspx$" "/index.html"

a nezapomeňte restartovat Apache, aby se změny projevily.

To se může hodit, pokud byly vaše stránky původně navrženy pomocí ASP a později změněny na prosté HTML5. Vyhledávače budou mít soubor .aspx indexovaný, ale tento soubor již neexistuje.

V takovém případě budete muset najít způsob, jak přesměrovat požadavek, aby vaši potenciální návštěvníci nenarazili na chybovou stránku. Pro testování vytvořte jednoduchý HTML soubor s názvem index.html uvnitř /var/www/html s následujícím obsahem:

<!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>

Znaky stříška a dolar způsobí, že regulární výraz bude odpovídat libovolnému řetězci začínajícímu /default a končícím .aspx, resp.

Doporučené čtení: Nainstalujte Mod_Pagespeed, abyste zrychlili výkon Apache až 10x

Nyní spusťte prohlížeč a přejděte na 192.168.0.100/default.aspx. Pokud věci půjdou podle očekávání, Apache by měl místo toho poskytovat index.html.
Koncový uživatel však v adresním řádku stále uvidí default.aspx, což způsobí, že změna bude zcela transparentní:

Pokud chcete, aby adresa URL v adresním řádku ukazovala, že server skutečně poskytuje index.html namísto stránky s názvem default.aspx, přidejte [R, L] na konec pravidla přepisu takto:

RewriteRule "^/default\.aspx$" "/index.html" [R,L]

Zde [R,L] jsou dva volitelné příznaky, které označují, že by mělo být vydáno úplné přesměrování HTTP do prohlížeče (R) a že by se neměla zpracovávat žádná další pravidla:

Všimněte si, že adresní řádek nyní podle očekávání zobrazuje index.html namísto default.aspx, jak tomu bylo dříve.

souhrn

V tomto článku jsme vysvětlili, jak použít mod_rewrite k provedení interního přesměrování. Zůstaňte naladěni na další příspěvek, kde se naučíme, jak přesměrovat na zdroj, který byl přesunut na jiný server, a jak zobrazit vlastní obsah na základě prohlížeče uživatele. Do té doby nahlédněte do dokumentace Apache 2.4, kde najdete úplný seznam dostupných příznaků přepisu.

Jako vždy, pokud máte nějaké dotazy nebo zpětnou vazbu k tomuto článku, použijte níže uvedený formulář pro komentáře. Těšíme se na setkání s Vámi!