Nečekaný potenciál chybové 404 stránky

Dnes snad již neexistuje webhosting, který by klientům nenabídl možnost změny chybové 404 strany. Na první pohled to vypadá jako nepodstatný detail, protože návratovou stránku 404 vidí jen několik málo uživatelů, kteří z nějakého důvodu otevírají URL s neexistujícím dokumentem. Čili, drobná hračička.

Ovšem bylo by chybou, kdybychom mezi chybovou 404 stránku a jeden HTML dokument pokládali rovnítko. Může totiž jít i o serverový skript pracující s cestou k požadovanému dokumentu, jakožto řetězcem. Logika serverového skriptu může vracet jiné návratové kódy, než HTTP/1.1 404 Not Found – příkladně HTTP/1.1 200 OK, nebo HTTP/1.1 301 Moved Permanently. Chybová 404 stránka jakožto skript se, jak naznačím dále, může stát pilířem celého webu.

Uvádím zde malý příklad PHP skriptu, funkčního na webových serverech Apache, typických pro systémy Linux. Skript vyhodnocuje cestu k požadovanému dokumentu. Pokud je rovna konkrétnímu řetězci, vrátí hlavičku HTTP/1.1 301 Moved Permanently, čímž informuje klienta o novém umístění dokumentu:

$pozadovany = $_SERVER["REQUEST_URI"];
if ($pozadovany == '/stara/cesta/soubor.html') {
  header('HTTP/1.1 301 Moved Permanently');
  header('Location: htttp://www.example.cz/nova-cesta/soubor.html');
  die('<html> … Dokument byl přesunut na … </html>');
  }
else {
   die('<html> … Chyba 404 … </html>');
}

Pro zběhlého vývojáře je už jen hračkou vytvořit takový skript, který by směroval podle seznamu starých a nových umístění dokumentů. Seznam by mohl být uložen mimo skript, třeba v textovém souboru.

To ale není všechno. Po vyhodnocení požadovaného URL lze skriptem načíst z databáze dokument a poslat jej na výstup jako plnohodnotnou stránku s návratovým kódem HTTP/1.1 200 OK. Šlo by na tom postavit celý web s user-friendly adresami, bez modulu mod-rewrite, bez přítomnosti rozsáhlejší souborové struktury. Představivosti se meze nekladou.

Pozn.: Celý postup bude pravděpodobně realizovatelný pouze na některém z webhostingů. Záleží na konfiguraci. Ukázka byla otestována na Českém hostingu. Tamtéž budou jistě funkční i další řešení stojící na zmíněném základu.

Komentáře

1. kouba – 8. listopadu 2004, 13:00

Toto již bylo popsané – Pavel Růžička: Vlastní přesměrovací služba (Interval.cz, 27. února 2002). Jinak obdobného chování využívá třeba t-mobile na svém webu. Spíše ale k usnadnění nalezení požadovaného, např. http://t-mobile.cz/software vs. http://t-mobile.cz/nejakynesmysl.

Pozn. JB.: Komentář byl upraven.

2. Jan Bien – 8. listopadu 2004, 13:05

Ad [1]: Zmíněný článek bych příliš nedoporučoval, protože je zmatečný a svádí k používání velmi, po stránce klienta, nestandardních řešení (konkrétně „rámec velikosti okna“).

3. Bohumír Bednařík – 8. listopadu 2004, 13:06

Myslím, že o možnosti využití chybové stránky 404 pro přesměrování jsem už někde četl. Bohužel si už nepamatuju, kde to bylo. V každém případě je to velice zajímavý nápad.

4. Yuhů – 8. listopadu 2004, 16:36

A fakt to vrátí 301? Fí ha! Myslel jsem si vždycky, že ať na to navěsím cokoliv, že to bude vždycky vracet 404. Tak jsem se asi mýlil.

5. Jan Bien – 8. listopadu 2004, 16:52

[4] Ano, skutečně, Dušane. Návratové hlavičky si můžeš řídit skriptem jak se Ti zamane. Ale, jak jsem psal, tak nevím, zda to bude fungovat všude (nemám znalosti stran administrace serverů). Asi bude záležet na konfiguraci serveru.

6. lacop – 8. listopadu 2004, 18:38

Funguje to aj na Webzdarma!

Pozn. JB.: Komentář byl upraven.

7. Vilém Málek – 9. listopadu 2004, 01:01

Ad [2]: Je zajímavé, že když se někde odkáže na nějaký starší materiál, obvykle hned někdo „vypíchne“ chyby nebo přehmaty. Všichni pitvají omáčku a podstaty věci, tedy principu řešení, si nikdo nevšímá. Vysvětluji si to tak, že na rozdíl od programátorů, zvyklých na analytické myšlení, jádro problému „prostí“ webdesignéři nevidí. Ovšem toto vysvětlení mně moc neuspokojuje. ;-(

Čím dál častěji čtu na blozích spoty objevující letadlo nebo vynalézající kolo, případně oheň. Už mnohokrát jsem si říkal, že to je jak v blázinci. Tento spot, bohužel, není jiný. Na systému uživatelského skriptu 404 se začaly stavět celé weby ve chvíli, kdy to umožnila implementace HTTP v serverech, především Apači, a to už je hezkých pár let (v IIS až od verze 5, tedy od roku 2000).

Typickou ukázkou výše uvedeného je třeba „inteligentní“ manuál k PHP. Zkuste si zadat například http://www.php.net/header – CMS vám nejen podsune informace o hledané funkci, ale navíc provede celou řadu dalších operací (kešování, rozložení zátěže, jazyková lokalizace).

A mimochodem, všimněte si, že vrácená hlavička je HTTP/1.1 302 Found. To je správná hlavička pro tento typ operace podle RFC 2616 – Hypertext Transfer Protocol — HTTP/1.1. Ve spotu zmiňovaná hlavička HTTP/1.1 200 OK je naprosto nepřípustná a u některých serverů může pokus o její použití prostřednictvím PHP funkce header() nebo adekvátní ASP funkce vést ke zhroucení serveru.

Ale vraťme se k úvodu tohoto příspěvku. K webdesignu jsem se dostal od programování. Mnozí „webdesignéři“ v současnosti prohlašují, že programování nerozumí a dokonce jsou na to hrdí. Těm všem bych doporučoval se trochu dovzdělat. Usnadní jim to život a ubyde také množství diskusí o samozřejmostech.

8. Lukáš Mačí – 9. listopadu 2004, 16:26

Ad 7. Pane Málku, nebuďte tak kritický. Já si myslím, že není na škodu, když se nějaké téma sem tam opráší. I když jsem ten starší článek četl, asi bych si na něj nevzpomněl, takhle mi to mravenci naservírovali až pod nos. Nemluvě o tom, že mravenci si svůj blog píší hlavně pro svoji potřebu jako asi každý bloger (kromě jistých případů). Co se opakujících témat týče, tak to bude asi tím, že žádné supernovinky nejsou k mání. Mimochodem, Váš Interval poslední dobou také moc převratných článků na supernová témata nevydal.

9. Jiří Zahradil – 10. listopadu 2004, 13:13

Hmm, taky to už používám (dlouho, viz Oklikou na SEO URL bez mod_rewrite). Je to docela šikovné.

Zajímalo by mě, zda někdo neví, zda toto řešení je či není efektivní oproti mod_rewritu – či mod_aliasu přímo u Apache.

Jinak bych chtěl upozornit, že pro použití s „user-friendly adresami“ je tento typ nezávislý na serveru. Chybovou stránku umí jak třeba IIS, tak Apache – což je poměrně výhoda oproti klasickým řešením ala mod_alias a mod_rewrite.

10. M.D. – 11. listopadu 2004, 18:10

Já bych s panem Málkem souhlasil. Přestože nerad zobecňuji, už často jsem se na různých blozích webdesignérů setkal s podobnými „objevenými Amerikami“.

Přitom, pokud znáte specifikaci protokolu HTTP a ještě lépe technický princip fungování webového serveru (napsat si vlastní malinký modul pro Apache není na škodu), připadají vám takové „finty“ zcela samozřejmé.

11. martinpav – 13. listopadu 2004, 02:26

No ja len prihodim jeden odkaz. Chris Beasley: Search Engine-Friendly URLs (sitepoint, 10. srpna 2001)

Váš komentář

K článku nelze připojit komentář, Mraveniště bylo zakonzerováno.


Copyright © Jan Bien.
W3C XHTML 1.0  | W3C CSS 2  | UAW adaptive  | Geo URL  | RDF RSS