Nacházíte se: tvorba webu :: seo :: rewrite

Rewrite mód

Mod_rewrite

Jde o velmi užitečný modul, který běží na serveru Apache a slouží k velmi efektivní práci s URL adresou. Dají se s ní provádět neuvěřitelné věci. Bohužel má jednu velkou vadu, je rozsáhlý a né tak úplně jednoduchý.

Kde běží Rewrite mód?

Rewrite mód běží všude tam, kde jsou splněny následující podmínky:

  • Na serveru běží Apache
  • Na Apachi je nainstalován a povolen Rewrite mód
  • Máte práva měnit nastavení serveru

Na co si dát pozor? Zacyklení

Ano ano, pokud jste nikdy nezkoušeli pracovat s .htaccess souborem, radím, aby jste si to nejprve vyzkoušeli a teprve pak začali laborovat s rewrite módem. Problémů, které většinou nastanou při konfiguraci rewrite módu je mnoho, ale taktéž většinou server oznámí, jakou chybu jste udělal. Například chyba 500, 501, atd. Problém nastává, pokud se žádná chyba neobjeví a přesto se Vaše stránka nenačetla. Právě teď pravděpodobně nastalo zacyklení. Procesor serveru se neunostně peče ve vlastní šťávě a Vy koukáte na prázdnou obrazovku, kde podle předpokladů už měla být načtena stránka.

Doporučení:

testujte doma, ne na ostrém serveru s aktuálními stránkami!!

.htaccess

Jde o soubor, který je umístěn například v root složce serveru. Sem budeme zapisovat všechny konfigurace, které budeme chtít po rewrite módu.


Zapnutí

Rewrite mód se musí zapnout v .htaccess.

RewriteEngine on


Přesměrování

Uživatel si zažádá o požadovanou stránku, ale bude přesměrován na jinou. Dodržujte zápis lomítek, jde totiž o špatně hledatelnou chybu. Přesměrovaná stránka začíná lomítkem, jde se tedy z rootu a jde o absolutní adresu! Zde se změní i adresa URL v prohlížeči.

# přesměrování
RewriteEngine on
RewriteRule požadovaná-stránka\.html /přesměrovaná-stránka.html [R]


Podstrčení

Místo zadané stránky se uživateli objeví stránka podstrčená bez toho, aby se změnila URL adresa, ta tedy bude požadovaná-stránka.html. Podstrčená adresa nezačíná lomítkem a tak adresa stránky je závislá na adresáři, ve kterém se nachází. Rozdíl v deklaraci je ten, že se oproti přesměrování vypustí [R].

# přesměrování
RewriteEngine on
RewriteRule požadovaná-stránka\.html /podstrčená-stránka.html


Regulární výrazy

Asi na nejednodušším příkladu se pokusím vysvětlit, jakpak to asi funguje. Z aktuálního adresáře, kde se nachází .htaccess, budu chtít přesměrovat na stránku s problematikou html.

RewriteEngine on
RewriteRule (.*) http://vytvorweb.czweb.org/html/ [R]

Nic těžkého, ale co znamená (.*)?
Je to libovolný počet libovolných znaků. (.(libovolný počet)*(libovolných znaků)).



Proměnné

Asi nejvíce užitečnou věcí je převod z regulárního výrazu na proměnnou. Kde to využijete? Například všude tam, kde chcete nehezké dlouhé neforemné URL převést na hezkou adresu.

Příklad:

ošklivá adresa:http://vytvorweb.czweb.org/index.php?page=seo&page2=rewrite
hezká adresa:http://vytvorweb.czweb.org/seo/rewrite.html

A teď jak se to provede v praxi.

RewriteRule ^(.*)/(.*)\.html$ %{DOCUMENT_ROOT}/index.php?page=$1&page2=$2

První ze závorek (.*) se uloží do proměnné page, koukneme-li na náš příklad, tak do proměnné page se uloží seo. Druhá ze závorek (.*) se uloží do proměnné page2. Page2 bude tedy obsahovat rewrite.

Takže to byl jeden z příkladů, jak efektivně předělat URL adresu. Níže pak uvidíte celý obsah .htaccessu, který se bude starat o celkové předělání URL adres. Nachází se v něm přesměrování stránky s www (www.xxx.cz) na adresu bez www.

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

Zde nejprve musí projít podmínka RewriteCond, aby se mohlo přistoupit k práci s RewriteRule. V tomto případě je testována proměnná %{HTTP_HOST}, která ukrývá hostname požadované URL adresy. Pokud začíná na www, je pravidlo aktivováno a adresa se přesměruje na adresu bez www. Příznak R=301, přesměruje stránku, QSA zařídí to, že co bylo za otazníkem v původním dotazu, bude i v přesměrovaném dotazu. Příznak L říká, že se jedná o poslední pravidlo.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.vytvorweb\.czweb\.org          
RewriteRule ^(.*)$ http://vytvorweb.czweb.org/$1 [R=301,QSA, L]


Pěkné URL s rewrite módem

Následující příklad nastavení rewrite módu funguje, ale nedoporučuji ho použít bez znalostí toho, co každý řádek dělá.

RewriteEngine On                 #zapnutí rewrite módu
Options +FollowSymlinks          #nepatří k rewrite módu 

Přeměrování adresy s www na adresu bez www

RewriteCond %{HTTP_HOST} ^www\.vytvorweb\.czweb\.org 
RewriteRule ^(.*)$ http://vytvorweb.czweb.org/$1 [R=301,QSA] 

Změna adresy, 1 a 2 proměnné

RewriteCond %{HTTP_HOST} ^vytvorweb\.czweb\.org
RewriteRule ^(.*)/$ %{DOCUMENT_ROOT}/index.php?page=$1 [nc,L,QSA]
RewriteRule ^(.*)/(.*)\.html$ %{DOCUMENT_ROOT}/index.php?page=$1&page2=$2 [nc,L,QSA]

Přeměrování index.html na adresu bez něj

RewriteRule  index\.html    /   [R]


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. Jestliže chcete původní požadavek oseknout, ukončete druhý parametr otazníkem.
[R] bude se přesměrovávat s kódem 302
[R=301] přesměrování půjde s http kódem 301
[F] nastavuje kód 403 - zakázáno. S RewriteCond umožňuje podmíněně zakázat některá URL.
[T=mime-typ] umožňuje výsledek poslat s jiným mime-typem.
[NC] nezáleží na velikosti písmen, velmi vhodné zejména k RewriteCond.


Proměnné v RewriteRule

%{REQUEST_FILENAME}
%{REQUEST_URI}
%{REQUEST_METHOD}
%{REMOTE_ADDR}
%{REMOTE_HOST}
%{PATH_INFO}
%{QUERY_STRING}
%{SERVER_PORT}
%{SERVER_NAME}
%{HTTPS}
%{HTTP_USER_AGENT}
%{HTTP_COOKIE}
%{HTTP_ACCEPT_LANGUAGE}
%{HTTP_HOST}
%{HTTP_REFERER}
%{ENV:REDIRECT_STATUS}
%{DOCUMENT_ROOT}
úvod | tvorba webu | ostatní | služby | návštěvní kniha | kontakt