jak se to dělá
Možnosti přesměrování stránky - Jenom odkaz - Přesměrování meta tagem - Přesměrování javascriptem - Přesměrování na straně serveru - Proč stránky přesměrovávat - Přesměrování na jiný typ souboru - Co na to vyhledávače - Beznadějný dotaz - Přesun domény
Možná se divíte, proč zmiňuji přesměrování odkazem, na který si uživatel musí kliknout. Je to ale nejméně riskantní a uživatel má dobrý pocit, že má prohlížeč plně pod kontrolou. Prostě tam napište "stránka je na nové adrese té a té + odkaz". Není co zkazit.
Nejoblíbenější způsob, protože se nemusí skriptovat a dá se vložit rovnou do staré stránky:
<meta http-equiv="refresh" content="4;url=http://jina_adresa.cz/cokoliv">
Číslo 4 vyjadřuje počet sekund, po kolika se udělá přesměrování. Adresa url na přesměrování může být i relativní:
<meta http-equiv="refresh" content="3;url=ondra.html">
Zkuste příklad. Trocha teorie: meta tag s http-equiv by prohlížeč měl chápat jako ekvivalentní http hlavičce. Http hlavička refresh vyvolá aktualizaci dokumentu, ale dá se přitom podstrčit jiné url (pokud tam url není, obnoví se tatáž stránka).
Stará stránka s meta tagem by neměla být prázdná. Kromě textu, který ujistí čtenáře, že je na správné cestě, by měla obsahovat odkaz na novou url. Může se totiž stát, že uživatel bude mít možnost meta refresh zakázanou (v Internet Exploreru je to na kartě Zabezpečení > Vlastní úroveň), třebaže to je řídký jev. Odkaz se bude také výborně hodit vyhledávačům a uživatelům alternativních browserů.
Příklad jednoduchého přesměrování javascriptem:
<script>
window.location.href="http://jina_adresa.cz/cokoliv";
</script>
nebo přesměrování na Seznam s tím rozdílem, že současná stránka nebude vůbec zařazena do historie:
<script>
window.location.replace("http://www.seznam.cz");
</script>
Javascriptové přesměrování je nejméně jistý způsob přesměrování. Kromě toho, že javascript může být (teoreticky) vypnutý nebo nepodporovaný, to může házet různé netušené chyby. Javascriptové přesměrování se používá zejména tehdy, když není předem jasné, kam se bude přesměrovávat (když se to napřed podle něčeho počítá, to meta tagem nejde). Dost často se to používá např. na velkých chatech. Nebo se javascriptem napřed zjišťuje, zda vůbec se bude přesměrovávat (např. reklamní interstitial podle cookies).
Zase je potřeba dát tam navíc odkaz na novou url.
Vhodné zejména pro stěhování více stránek, protože se to dá nastavit celému serveru najednou. Nastavuje se to v Apachi, IIS nebo v jiném softwarovém http serveru.
Server IIS od Microsoftu na to má v nastavení složky zaškrtávací políčko (nevím, jak se jmenuje), kam se potom dá nastavit nová složka, kam se obsah bude přesměrovávat.
Podstatné je, aby server při požadavku na starou adresu odpovídal 301 Moved Permanently (kód č. 301 znamená přesunuto nafurt). Pak totiž přesměrování správně pochopí i Google, Jyxo a jiné vyhledávače.
Na serveru Apache se přesměrování dá nastavit více způsoby. Oblíbené je použití modulu mod_rewrite, který se ovládá třeba souborem .htaccess, jenž si může psát sám autor webu (správce serveru musí mod_rewrite a .htaccess povolit, není to samozřejmost).
Návod na přesměrování pomocí mod_rewrite a htaccess vyšel v Sově v síti. Mod rewrite podrobněji je popsán na Rootu.
Ne na každém linuxovém serveru je mod_rewrite nainstalován. Pro jednoduché přesměrování stačí mod_alias, ten bývá na serveru Apache dostupný skoro vždy. Do souboru .htaccess se napíše řádek:
Redirect /pokus.html http://celaadresa.cz/pokus2.html
čímž dojde k přesměrování (http odpověď 302 dočasně přemístěno) souboru pokus.html na novou adresu. Uživatel sice do prohlížeče vyťuká starou (nebo klikne na starý odkaz), ale v řádku adresy už se mu objeví nová adresa. Přesměrovaný zdroj musí začínat lomítkem (odvozuje se od rootu webu), nová adresa musí být absolutní. Druhá varianta zápisu:
Redirect 301 /pokus.html http://celaadresa.cz/pokus2.html
Server by pak měl posílat http odpověď "301 moved permanently" s informací o nové URL. V praxi není mezi odpověďmi 301 a 302 žádný větší rozdíl. Prohlížeč by si měl sáhnout na nové URL (v http odpovědi řádek Location). Teoreticky vzato je to jediné zcela bezpečné a správné přesměrování.
Pokud není použití souboru .htaccess povoleno, dá se to napsat rovnou do konfiguráku serveru (httpd.conf). Jestliže vám to přijde složité, tak většina správců serveru to umí nastavit (vyjma správců freewebů, ti to nedělají).
Na staré stránky se v případě serverového přesměrování nedává žádný speciální obsah, protože server ty staré stránky vůbec nebude odesílat. I při dotazu na starou adresu se v prohlížeči automaticky objeví nová. Zkuste si například vyťukat http://dusan.pc-slany.cz/internet/presmerovani.htm a uvidíte, že jste zase na této stránce (protože všechno z dusan.pc-slany.cz/internet/ se nastavením serveru přestěhovalo na www.jakpsatweb.cz/).
V jazyce PHP je funkce Header(), do kterého se dá napsat parametr Location s novou adresou. Pokud je funkce header() na serveru povolena, dojde k přesměrování na novou stránku:
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.celaadresa.cz");
header("Connection: close");
Když stránka byla na jednom místě a teď je jinde, tak je jasné, že je potřeba přesměrovat. Ve všech jiných případech je použití přesměrování sporné. Rozhodně by nemělo jít o standardní součást navigace webu. Kdo nepřesměrovává, vyhrál předem. Nepřesouvejte soubory a adresy zbytečně.
Aby se čtenář / uživatel nepolekal a nezdrhnul. Máte rádi, když vám prohlížeč z ničeho nic problikne a začne se načítat jiná stránka? Já ne.
Hezký trik využívá přesměrování při stahování souborů nebo hudby. Meta refresh se nenamíří na jinou html stránku, ale třeba na soubor typu zip.
<meta http-equiv="refresh" content="1;url=http://www.sweb.cz/yuhu/jak_psat_web.zip">
Prohlížeč takový soubor neumí otevřít, a tak zavolá externí aplikaci (nebo se zeptá, jestli se to má stáhnout). Původní stránka přitom zůstává v prohlížeči. Můžete se podívat na příklad přesměrování na stažení souboru. Dělá se to v tehdy, když je potřeba počet stažení zipu přibližně počítat (a nejde to z logu).
Stejnou konstrukcí se dá dosáhnout jiného efektu -- přehrávání hudby. Návod jsem na to četl už před šesti lety (psáno 2003) v Satrapově Web Designu. Refresh se namíří na hudební soubor, který by si v ideálním případě měla převzít hudební aplikace (třeba Winamp). Podmiňovací způsob je ale na místě, protože dost často to vyhazuje nějaké divné hlášky, takže to doporučuji nepoužívat.
Názory a přístupy se různí. Každý vyhledávač se s přesměrováním potýká jinak. Obecně se dá říci, že přesměrované stránky chápou vyhledávače jako méněcenné. Jako nejjistější pro Google se uvádí serverové přesměrování (hlavička 301) a já s tím mám dobré zkušenosti. Podle mých pozorování Google po dvou měsících převede 301 přesměrovaný záznam na nové url a zachová mu pozici ve výsledcích (pouze na dva dny [během Google-dance] to z výsledků vypadne). Také Jyxo hlavičku 301 respektuje. Ale katalogy přesměrování nemají rády. Například Seznam nedovoluje vložit stránku, která se přesměrovává (nepozná ale javascriptové přesměrování, pokud si toho admin nevšimne).
Meta tagy a přesměrování javascriptem jsou pro vyhledávače nevhodné. To už je lepší obyčejný odkaz.
Občas dostávám prosby o radu typu: "Ten a ten server mi zrušil stránky nebo odepřel přístup, takže se na ně nedostanu. Potřebuji je přesměrovat."
To nejde nijak. Pokud je správce serveru nedostupný nebo nechce komunikovat a na stránky se nedá uploadovat, není šance. To klasicky nastává na freewebech při porušení podmínek (ať už domnělém nebo skutečném). Pak je potřeba prostě všem nějak sdělit, že mám novou adresu a přesměrovat případné odkazy. Nebo se soudit :-)
Pokud máte doménu druhé úrovně něco.cz hostovanou u nějakého nesolidního správce serveru (providera), můžete přestěhovat celou doménu. Nejlépe tak, že se dohodnete s nějakým jiným solidním správcem a ten to zařídí. V zásadě to udělá tak, že registrátorovi domény (dříve to byl NIC, úřad spravující doménu cz) sdělí novou adresu primárního DNS serveru. Někdy se dá s providery domluvit, že DNS zůstane na starém místě a A záznam bude ukazovat na nový server. Neznáte-li seriózní servery, napište mi, můžu jich pár doporučit.
o tvorbě, údržbě a zlepšování internetových stránek