Tak jak se časem web vyvíjí, některé stránky vznikají, některé zanikají a některé se (bohužel) přejmenovávají a přesouvají. Původní adresa každé přejmenované/přesunuté stránky by měla (ideálně navždy) odkazovat pomocí přesměrování na novou stránku. Rozhodně není dobré řešení stránky jen přejmenovat a na jejich původní adresu prostě zapomenout. Mohou na ně totiž mířit odkazy (a to jak z Vašeho webu, tak i odjinud) a mohlo by to přinejmenším zmást vyhledávače. Stejně tak není dobré stránky dokola někam přesouvat, je pak snadné se v tom ztratit.
Přesměrovat jednu či pár stránek není problém, to lze udělat jednotlivě například takto:
RewriteEngine on
RewriteRule /stara-stranka.htm /nova-stranka.htm [R=301]
Ale co dělat, pokud se rozhodnete pro nějaké radikálnější změny struktury webu? Pokud mají změny adres jednotlivých stránek nějaký pravidelný systém, je možné stránky jednoduše přejmenovat/přesunout a použít htaccess pro přesměrování všech těchto stránek najednou. Například přesměrování celého webu z jedné domény na druhou může v .htaccess zabrat 2 řádky, ať už má web stránek/souborů kolik chce:
RewriteEngine on
RewriteRule (.*) http://www.nova-domena.cz/$1 [R=301,QSA]
Další příklad demonstruje použití podmínky: přesun všech php stránek z jedné domény na druhou provedete vložením tohoto .htaccess souboru do staré domény:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*).php
RewriteRule (.*) http://www.nova-domena.cz/$1 [R=301,QSA]
Výhodou je, že tyto podmínky lze skládat za sebe, což demonstruje následující příklad, který přesměruje libovolný požadavek na soubor, který nemá ani jednu z koncovek gif, jpg, bmp. O negaci se stará právě ten vykřičník na začátku podmínky. Ten dolar na konci znamená konec adresy.
RewriteCond %{REQUEST_URI} !\.gif$
RewriteCond %{REQUEST_URI} !\.jpg$
RewriteCond %{REQUEST_URI} !\.bmp$
RewriteRule (.*) http://www.nejmedia.net
Pokud chcete přesměrovat obsah Vašeho webu bez www na verzi s www, upravte si následující kód:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^vase-domena\.cz [nc]
RewriteRule (.*) http://www.vase-domena.cz/$1 [R=301,L]
Pokud pak tedy zadáte adresu http://vase-domena.cz automaticky se přesměruje na http://www.vase-domena.cz. Stejně tak se bude dít i se všemi podstránkami webu. Opačné přesměrování, na adresu bez www, lze uděláte obdobně:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.vase-domena\.cz [nc]
RewriteRule (.*) http://vase-domena.cz/$1 [R=301,L]
Mod_rewrite umožňuje spousty zázraků a to především díky regulárním výrazům. Problém ovšem nastává, pokud budou Vaše změny složitější a již nepůjdou zapsat pomocí regulárních výrazů. Například pokud zaměníte velké množství stránek typu "102-pobyt-v-praze.htm" za "bydleni-v-hotelu.htm", zřejmě se Vám nepodaří napsat jednoduché pravidlo, které by vše dělalo automaticky.
Ukázka řešení velkého počtu různých přesměrování pomocí chybové stránky je v následujícím díle: Tuning chybové stránky.
RewriteCond %{HTTP_HOST} www\.vase-domena\.cz/produkt\$1 [nc]
RewriteRule (.*) http://www.e-shop.vase-domena.cz/$1 [R=301,QSA]
[1] TOM (http://letenky.TipTravel.cz) dne 12.09.2007:
pomohlo dekuji