Vlastní přesměrovací služba

27. února 2002

Pokud vlastníte zajímavou doménu, možná by návštěvníci stránek uvítali možnost „pyšnit“ se touto doménou v adrese svých stránek. Stačí vytvořit službu, která např. po zadání „bubak.interval.cz“ zobrazí v rámci velikosti okna stránku „www.volny.cz/bubak“. URL v adresním řádku prohlížeče přitom zůstane stále „bubak.interval.cz“.

Rámec musí mít 100 % velikosti okna, aby byla stránka zobrazena v celém okně (žádné rámce nebude vidět). V souboru definice rámce je také pamatováno na vyskakovací okno reklamy, které můžete případně použít jako odměnu za to, že svou službu nabídnete k dispozici zdarma. Nutnou podmínkou ke zprovoznění přesměrovací služby je možnost nastavit si vlastní chybovou stránku 404 – Dokument nenalezen.

Klasická chybová stránka se zobrazí tehdy, kdy někdo požaduje po serveru vaší domény soubor, který neexistuje. Obvykle je tato stránka pojmenována jako 404.phtml a je v neveřejné složce.  Pokud budete službu vlastní chybové stránky teprve uvádět  do provozu, může vám znepříjemnit život "vylepšení" prohlížeče IE. Máte-li ve vlastnostech IE zatrženo Zobrazovat podrobné zprávy protokolu HTTP a velikost chybové stránky je menší než 1 024 bytů, pak Explorer nezobrazí při chybě 404 stránku, kterou odeslal server, ale svoji vlastní, což by mohlo vést k dojmu, že zobrazení vaší zvolené chybové stránky nepracuje. Proto si při testování tuto vlastnost vypněte.

Další podmínkou je možnost použití databáze – v té budou uloženy údaje jednotlivých klientů, kteří budou službu využívat. Šlo by sice použít i běžný textový soubor, ovšem jako krajní řešení. Do tabulky databáze uložíte jméno uživatele služby (to bude zároveň tvořit adresu jeho stránek), název stránek (ten budete generovat do title stránky rámce), adresa stávajících stránek klienta, jeho e-mail a heslo (pro pozdější změny nastavení).

Princip služby bude tento: Jakmile bude někdo požadovat neexistující dokument, ověří se v databázi, zda se nejedná o některého klienta přesměrovací služby. Pokud ano, vygeneruje se stránka s neviditelným rámcem s vloženou stránkou klienta. Pokud ne, vygeneruje se chybová stránka. Je-li to možné, zajistěte, abyste mohli typ odpovědi serveru (zejména hlavičku chyby 404) volit (odesílat) sami (v PHP pomocí Header). V opačném případě se bude i stránka s neviditelným rámcem odesílat s HTTP hlavičkou 404 (dokument neexistuje). To nevadí prohlížeči (stránka se zobrazí), pokud by ale existenci stránky kontroloval nějaký katalog, podle hlavičky 404 by mohl usoudit, že stránka neexistuje, a vyřadil by ji ze seznamu.

Pro přehlednost ponechejte část skriptu, která bude obsluhovat vaši službu přesměrování, ve zvláštním souboru redir.php, který vkládejte pomocí require do chybové stránky 404.phtml. Na začátek skriptu přidejte řádek <?PHP require("redir.php") ?>. Soubor redir.php, který vám překládám, předpokládá aktivní službu multidomain na serveru. Zde platí, že každý podadresář veřejné složky se stává zároveň subdoménou. S touto službou proto můžete snadno nabízet klientům adresu ve tvaru jmeno.nase_domena.cz. Pokud server multidomain nepodporuje, je nutné upravit skript redir.php. Analýza jména uživatele bude odlišná, protože pak můžete nabízet pouze adresy ve tvaru www.nase_domena.cz/jmeno.

<?php
$conn = @mysql_connect("sql.server.cz", "uzivatel","heslo"); // připojení k databázovému serveru
if (!@mysql_select_db("databaze", $conn)) { // zvol databázi a otestuj, zda proběhlo úspěšně
  echo "<big><pre><b>Omlouváme se, probíhá údržba serveru…<p>We apologize – servicing is in process…</b></pre></big>"; // případnou chybu zakamufluj vhodným hlášením
  exit;  // ukonči skript
}
$user=Str_Replace("www.","",StrToLower($HTTP_HOST));  // vyjmi www, pokud je zadáno před adresou
$user=SubStr($user, 0, StrPos($user,".")); // ořízni zbývající část adresy, aby zbylo jen jméno uživatele
$user=AddSlashes($user); // přidej zpětná lomítka proti možnému nabourání SQL dotazu
$url = @mysql_fetch_row(@mysql_query("SELECT url, title FROM redirect WHERE user = ‚$user‘ limit 1"));
if (!empty($url[0])) {  // pokud se podařilo nalézt uživatele v databázi, generuj stránku rámce
  echo "<html>\n<head>\n<title>$url[1]</title>\n"; // do title vygeneruj název stránky z databáze
  echo "<script language=\"JavaScript\">\n<!–\n"; // Javascriptem otevři vyskakovací okno s reklamou
  echo "window.open(‚http://www.server.cz/reklama.htm‘, ‚ads‘, ‚toolbar=no, menubar=no, location=no, directories=no, scrollbars=no, resizable=no, status=no, width=200, height=180‘);\n";
  echo "//–>\n</script>\n</head>\n";
  echo "<frameset border=\"0\" frameborder=\"0\" framespacing=\"0\" framecolor=\"#00000\" rows=\"100%\">\n"; // definice rámce
  echo " <frame src=\"$url[0]\">\n"; // nastavení url stránky rámce údajem z databáze
  echo "</frameset>\n<noframes>\n<body>\n<p><center><big><b><a href=\"$url[0]\">$url[1]</a></b></big></center></p>\n"; // odkaz na adresu stránek v části, která se objeví, pokud browser klienta nepodporuje rámce
  echo "</body>\n</noframes>\n</html>";
  exit; // ukonči skript
}
?>

Na závěr popíši strukturu tabulky databáze – vytvořím novou tabulku s názvem "redirect" a s pěti položkami:

user – typ VARCHAR (128)
url – VARCHAR (128)
title – VARCHAR (128)
email – VARCHAR (128)
heslo – VARCHAR (32)

Příklad naplnění jednoho řádku databáze:
houba, http://www.geocities.com/siliconvalley/station/5705/, HOUBOVY STRÁNKY, houba@post.cz, XXXX

Heslo jsem zadal ve tvaru XXXX, jelikož tato aplikace zadávání hesel neřeší – ideální by bylo zadat ho zakódované ve formátu MD5. Budete-li mít zájem, připravím i popis administrační části aplikace, kde si budete moci aktivovat a nastavovat službu sami. Nyní můžete službu zpřístupnit tak, že vám požadované údaje zašle zájemce e-mailem a vy je doplníte do databáze.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *