Co vlastně je MOD REWRITE a jak jej používat?

mod_rewrite
Petr Hahn

mod_rewrite je modul Apache, který umožňuje manipulaci s adresami URL. Příchozí URL jsou kontrolovány řadou pravidel. Pravidla obsahují regulární výraz pro detekci určitého vzoru. Pokud se vzor nachází v URL, a jsou-li splněny příslušné podmínky, vzor je nahrazen řetězcem nebo se provede jiná akce. Tento proces pokračuje, dokud nejsou dostupná žádné další pravidla nebo je proces ukončen ukončovacím znakem.

Výhody mod_rewrite

mod_rewrite se nejčastěji používá k transformaci ošklivé URL do toho, co je známo jako “přátelská URL” nebo též čistá URL.

Následující příklad ukazuje základní přepis do SEO friendly adresy.

  1. Základní adresa: http://example.com/user.php?id=4512
  2. Lepší adresa: http://example.com/user/4512/
  3. Nejlepší případ: http://example.com/user/Joe/

Nejen, že třetí adresa je nejlépe zapamatovatelná a čitelná, je také mnohem jednodušší pro vyhledávače extrahovat sémantický význam z této adresy. Tento základní druh přepisování URL je jedním ze způsobů, který mod_rewrite používá. Nicméně mod_rewrite umí mnohem více než takto jednoduchou transformaci.

Způsob vykonávání příkazů

Všechno začíná požadavkem, který zadá uživatel. Ten zadá adresu URL do adresního řádku svého prohlížeče. Prohlížeč přeloží tuto adresu na http požadavek a odešle na Apache server. Apache obdrží tuto žádost, a pak ji rozloží na jednotlivé kousky.

Pokud pracujete v souboru .htaccess, pak pracujete s REMOTE_URI částí, ale bez předního lomítka. Vzor je vždy regulární výraz testující se proti URL příchozí žádosti (část po hostname, ale před otazníkem označující začátek řetězce dotazu).

Příznaky v hranatých závorkách

[L] - Poslední pravidlo, nic už dál nepřepisuj

[QSA] - Do přepsané / přesměrované adresy přidej za otazník vše, co je za otazníkem v původním požadavku (query string).

[R=301] - Přesměrování půjde s http kódem 301

[F] - Nastavuje kód 403 - zakázáno. Umožňuje podmíněně zakázat některá URL.

[NC] - Nezáleží na velikosti písmen.

Příklady použití

Přesměrování ze stará domény na novou

Přesměrování na doménu s www

  • RewriteCond %{HTTP_HOST} !^www. [NC]
  • RewriteRule (.*) http://www.%{HTTP_HOST}/$1  [R=301,L]

Automatické doplnění lomítek

  • RewriteCond %{REQUEST_URI} !.[[:alnum:]]+$
  • RewriteRule ^(.+[^/])$ /$1/ [R=301]

Zamezení hotlinků na obrázky

  • RewriteCond %{HTTP_REFERER} !^$ 
  • RewriteCond %{HTTP_REFERER} !^http://(www.)?example.com/ [NC] 
  • RewriteRule .(gif|jpg|png)$ - [F]

Přesměrování na 404 pokud soubor neexistuje

  • RewriteCond %{REQUEST_FILENAME} !-f 
  • RewriteCond %{REQUEST_FILENAME} !-d 
  • RewriteRule .? /404.php [L]

Vynucení zabezpečeného protokolu

  • RewriteEngine On
  • RewriteCond %{HTTPS} off
  • RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}


Petr Hahn - Programátor

Ač programátor, málokdo ve firmě má větší sílu. Petr je zkušený teamleader zaměřený na vývoj, trendy a pivo.

Při poskytování služeb nám pomáhají soubory cookie. Používáním našich služeb vyjadřujete souhlas s naším používáním souborů cookie.