Přesměrování stránky

různé možnosti, 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žnosti přesměrování stránky

Pokud se mluví o přesměrování, obvykle se myslí přesměrování serverovou hlavičkou.

Jenom odkaz

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.

Přesměrování meta tagem

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řesměrování javascriptem

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á, tak 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.

Přesměrování serverovou hlavičkou

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.

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).

Podstatné je, aby server při požadavku na starou adresu odpovídal 301 Moved Permanently (kód č. 301 znamená přesunuto nafurt), nebo alespoň 302 Moved termorarily. Pak totiž přesměrování správně pochopí i Google, Seznam a jiné vyhledávače.

Sepsal jsem pro vás návod na začátky s mod_rewrite. Můžete také mrknout na pokročilé příklady na mod_rewrite od Kajmana.

Mod_alias, jednoduchý redirect

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í.

Mod_alias umí i regulární výrazy, symbolický zápis potom je

RedirectMatch regular-puvodniho-url nova-adresa

Pokud není použití souboru .htaccess ¨na serveru 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 https://bulharsko.evropou.cz/ a uvidíte, že jste stránce https://www.bulharsko.net . To je kvůli tomu, že jsem všechno ze své domény bulharsko.evropou.cz přesměroval na jinou svou doménu bulharsko.net pomocí serverového přesměrování.

Složitější přesměrování přes mod_rewrite

Pokud potřebujete přesměrovávat nějaké šílenosti podle složitých pravidel, nastudujte si něco o mod_rewrite. Je to šílená alchymie a při testování uvidíte spoustu veselých chybových hlášení. Na druhou stranu je nutno říct, že kdo mod_rewrite ovládá, dokáže přesměrovat velblouda do ucha jehly.

Ne na každém linuxovém serveru je mod_rewrite nainstalován. Na windowsím IIS prý něco jako mod_rewrite existuje, jmenuje se to tuším ISAPI rewrite. Nic o tom nevím.

Příklad přesměrování celého webu z protokolu http na https s použitím mod_rewrite uvádím v návodu o přechodu na https.

PHP přesměrování hlavičkou

V jazyce PHP je funkce Header(), do které 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. Následující kód se vloží do staré stránky:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.celaadresa.cz");
header("Connection: close");
?>

Rozdíl mezi přesměrováním 301 a 302

Postupem času jsem dospěl k názoru, že 301 a 302 se skoro vůbec neliší. Rozdíly jsou pouze 2:

Tip: kvůli kešování 301 prohlížečů je dobré při ladění a pokusech používat přesměrování 302. Jakmile to začne fungovat, změňte to definitivně na 301.

Proč stránky přesměrovávat

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ě.

A proč nepřesměrovávat

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.

Přesměrování na jiný typ souboru

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. Dělá se to tehdy, když je potřeba počet stažení zipu nějak 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.

Co na to vyhledávače

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 klientsky přesměrované stránky (meta tag, javascript) 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 nebo 302) 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ů vypadává).

Také Bing hlavičku 301 respektuje. Hlavička 302 se chová hodně podobně, ne-li stejně.

Fulltext Seznamu kromě hlaviček 301 a 302 respektuje i přesměrování meta tagem s libovolnou nastavenou dobou. Ačkoli tedy Seznam meta tagy bere, přesměrování přes meta tagy a přesměrování javascriptem jsou pro vyhledávače obecně nevhodné. To už je lepší obyčejný odkaz.

Vyhněte se masivnímu přesměrování mnoha stránek na jednu. V Googlu se tomu říká Faulty Redirect. Pro dobré vyhledávače není těžké rozpoznat situaci, kdy se ho web snaží ošálit, například tím, že celou starou doménu přesměruje na hlavní stránku nové domény, nebo když všechny neexistující stránky přesměrovává na nějakou vybranou (typicky hlavní). Při změně domény je jedině správné přesměrovávat minulou URL na novou URL se stejným obsahem. Neexistující nebo zaniklé stránky je správné označit chybou 404 nebo 410. Faulty Redirects vyhledávače zahazují.

Beznadějný dotaz

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.

Stěhování domény

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 hostingem 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, nyní jeden z registrátorů) 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.

 

Reklama

www.webhosting-c4.cz, extra rychlý SSD webhosting s doménou v ceně
o tvorbě, údržbě a zlepšování internetových stránek

Návody HTML CSS JavaScript Články Ostatní

Základy Prvky stránek Tvorba webu

Jak psát web píše Yuhů, Dušan Janovský. Kontakt.