S přechodem na nový software webu se objevil zajímavý problém. Vyhledávače na Internetu znají mají indexovány odkazy a cesty ke stránkám. Ty se ale s přechodem změnily a všichni návštěvníci rázem končí na hlavní stránce. Je fakt, že při plánování migrace mě to nenapadlo. Zjistil jsem to vlastně až z logů webu.

Problém je možné nechat vyšumět. Prostě počkat, až si vyhledávací roboti projdou novou podobu stránek a zaindexují nové odkazy. To ale trvá a pro návštěvníka je nekomfortní. Další možností je přesměrování požadavků pomocí modulu mod_rewrite. Touto cestou jsem se vydal i já.

Nechci popisovat vlastnosti a možnosti modulu. Takových článků je na Internetu mnoho. Pěkný seriál je třeba na stránkách JavaScript Kit. Příspěvek je orientován spíš na popis řešení dané situace.

Z Google Webmaster Tools jsem si nechal vypsat stránky, které jsou indexované v databázi. Tím jsem získal seznam URL pro přepisovací pravidla. Vyřadil jsem všechny starší příspěvky a pro zbytek napsal jednoduchá přepisovací pravidla.

Všechna pravidla jsou uložena v souboru .htaccess v kořenovém adresáři webu. Přepisovací mód je zapnut direktivou RewriteEngine. Direktivou RewriteBase je nastaven kořen od kterého bude přepisování prováděno.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

Poté následují jednotlivá pravidla a podmínky. Přepisování jsem vyřešil pomocí direktiv RewriteCond a RewriteRule. RewriteCond zjistí, jakou stránku uživatel požaduje. Direktiva má následující syntax:

RewriteCond      typ_výrazu      výraz

Netestuji celé URL, protože jméno ani adresa serveru se neměnila. Zajímá mě pouze požadovaná cesta ke stránce. Typem testovaného výrazu je tedy QUERY_STRING. Výrazem je pak významná část „adresy“ stránky. Cesta ke stránce nemusí být uvedena celá, lze používat regulární výrazy.

RewriteRule poté provádí samotné přesměrování a má následující syntax:

RewriteRule      požadovaná_stránka      výsledná_stránka nepovinné_příznaky

Stejně jako u předchozí direktivy, je možné i zde požadovanou stránku popsat regulárním výrazem. Nepovinné příznaky určují, zda jde o přepis, přesměrování, zda pokračovat dalšími pravidly …atd.

Příklad:

  • Na původním webu měl článek URL /index.php?text=16-letecka-mapa-pro-garmin-gps
  • Na novém je adresa /index.php?p=18

Uživatel stránku dostane jako /18/letecka-mapa-pro-garmin/. To je zajištěno dalším přepisem, který je prováděn automaticky pro všechny články.

Přepisovací pravidla pro tento případ vypadají takto:

# puvodni url index.php?text=16-letecka-mapa-pro-garmin-gps
RewriteCond %{QUERY_STRING} ^.*text=16-letecka-mapa-pro-garmin-gps.*$
RewriteRule ^index\.php$ http://jentak.draci.org/index.php?p=18 [L]

Pravidlo lze zjednodušeně interpretovat takto:

Pokud uživatel požaduje stránku, jejíž url obsahuje text text=16-letecka-mapa-pro-garmin-gps přepiš adresu na http://jentak.draci.org/index.php?p=18 (proveď přesměrování)

Příznak L znamená, že zde se přesměrovávání zastaví a další pravidla nejsou pro tento případ zkoumána a uplatněna. Protože články na starém a novém webu mají různá ID, nelze použít skupiny v regulárních výrazech.

Pro zjednodušení používám přesměrování na celé URL. Prostě proto, že mi to funguje. :-)

Asi by to šlo dělat i lépe. Takhle to pracuje spolehlivě a pro těch pár článků, pro které to mám udělané toto řešení stačí.

Zdroje dalších informací

Související články:

Žádné nejsou.

Hodnocení: Jen ztráta časuDalo se to číst (Zatím nehodnoceno)
Loading ... Loading ...

Zanechte komentář

Povolené značky: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>