Navigace

Hlavní menu

 

Submenu

 

Doménové aliasy - ušetřete za webhosting tentokrát s PHP

Netradičním využitím webhostingu můžete ušetřit nemalé peníze. Pavel Růžička vám poradí, jak nastavit vše potřebné. Upozorní vás také na případná omezení takového šetření.

Alias domény znamená, že více domén (dle záznamů v DNS) směřuje na tentýž webhosting, tedy na tentýž server, případně virtuální server. Doménový alias můžeme využít jednak pro jeho původní účel (například máme obchod s potravinami a chceme být na síti dostupní pod doménou potraviny.cz ale i jidlo.cz, vecere.cz atd.), jednak, pokud se smíříme s menšími nevýhodami, můžeme s jeho pomocí ušetřit za webhosting. Nebo si můžeme naopak pořídit nejdražší variantu webhostingu a tuto sdílet s dalšími subjekty, čímž se nám výrazně sníží náklady. Nejdražší varianta může stát skoro tisíc korun měsíčně, ovšem k dispozici jsou kvalitní služby, 500MB prostor, MySQL a případně za jednorázový poplatek zřízení dalších FTP účtů k adresářům. A na takový hosting se už vejde několik menších webů a ještě se tam mohou schovat nějaké ty osobní stránky.

Jedním z nedostatků popisovaného řešení je fakt, že díky doménovému aliasu jsou i maily (mailbox je obvykle také součástí webhostingu) doručovány do téhož mailboxu a že existuje pouze jeden koš, do kterého se sbírají maily ze všech aliasů. Pokud použiji příklad z úvodu, pak mail zaslaný na info@potraviny.cz bude doručen do stejného mailboxu jako mail poslaný na info@jidlo.cz. V tomto případě je řešením si předem "rozlosovat" adresy mailboxů tak, aby každý z klientů měl alespoň jednu "slušně" vypadající adresu. Druhým řešením by bylo nastavení přesměrování příchozích mailů na skript na straně serveru, který by je přesměroval do patřičného boxu. Například na Linuxu umístěním souboru .forward s nastavením přesměrování do domovského adresáře. Přesměrování mailů však překračuje rozsah tohoto článku. Viděl jsem také řešení, kde byly všechny maily z doménového koše přijímány na počítač do Outlook Expressu a z něj následně pomocí nastavených pravidel přeposílány do mailboxů jednotlivých klientů.

Dalším nedostatkem je to, že všechny webové aliasy ve skutečnosti směřují na jednu stránku. Možným řešením je udávat adresu přímo na soubor nebo adresář vlastní prezentace. To může postačit v případě, že chceme využít výhod drahého hostingového programu a na adrese prezentace nám až tak nezáleží. Právě tuto nevýhodu je ale možné vcelku elegantně napravit. Stačí prezentaci pro každý alias uložit do zvláštního adresáře a do kořene, na který směřují všechny aliasy, uložit skript, který podle doménového jména zajistí přesměrování do správného adresáře. Příklad je napsán v PHP, použitelná je však většina skriptovacích jazyků, například ASP a dokonce i JavaScript.

Vytvoříme si tedy adresáře jednotlivých prezentací. Není špatné volit třeba jen dvoupísmenné zkratky nebo jiné důmyslné názvy, ty se totiž po přesměrování objeví v adresním řádku prohlížeče. Do kořene našeho webhostingu uložíme tento jediný soubor index.php:

<?php
switch (StrToLower($HTTP_HOST)) // převést požadovanou doménu na malé znaky a předat do rozhodnutí switch
{
   case "frantisek.cz": $path = "frantisek.cz/fn/"; break;
   case "www.frantisek.cz": $path = "frantisek.cz/fn/"; break;
   case "jirka.cz": $path = "www.jirka.cz/jx/"; break;
   case "www.jirka.cz": $path = "www.jjirka.cz/jx/"; break;
   case "jirka.sk": $path = "www.jirka.sk/jx/"; break;
   case "www.jirka.sk": $path = "www.jirka.sk/jx/"; break;
   default: $path = "frantisek.cz/fn/"; // výchozí stránka
}
if (!empty($QUERY_STRING)) // pokud jsou zadány nějaké parametry, předat je dále i po přesměrování
   $path.="?$QUERY_STRING";
Header("Location: http://$path");
exit;
?>

Ve skriptu se v závislosti na zadaném doménovém jménu nastaví cesta k adresáři a nakonec se provede přesměrování. Zadaný název se převádí na malá písmena, protože některé servery konverzi neprovádějí, a tak by se v případě zadání adresy velkými písmeny stal skript nefunkčním. Ve skriptu je také řešení varianty s www i bez www, jak je vidět, uživatel "františek" v každém případě směruje vždy na adresu bez www, naopak jirka chce, aby se i při zadání adresy jeho stránek bez www nakonec pro přesměrování www v adresním řádku prohlížeče objevilo (viz Třikrát W v internetové adrese - past na laiky?).

Jirka má navíc zaregistrován ještě jeden alias pro doménu na Slovensku, která však směřuje do stejného adresáře. Nakonec je ještě ošetřen případ, kdy návštěvník zadá stránku přímo s parametry – někteří uživatelé i řadu parametrů píší zpaměti. Toto řešení je užitečné také v případě, že jsme původně měli stránky přímo v kořeni, tedy bez adresáře, a někdo si některou stránku uložil do oblíbených položek i s parametry. Pokud později přejdeme na sdílení hostingu pomocí aliasů, zůstanou i původní uložené odkazy funkční. Uživatel bude přesměrován na novou adresu včetně zadaných parametrů a pokud jsme nezměnili funkci skriptů, možná ani nezaregistruje, že URL je jiné.

Je zřejmé, že na serveru jsou prezentace v adresářích fn a jx. Adresář fn je určen pro prezentaci frantisek.cz, ovšem pokud by někdo zadal frantisek.cz/jx/, zobrazí se mu stránky patřící prezentaci jirka.cz. I tomuto lze zabránit a dále si ukážeme jak. Nejprve se ale podíváme, jak je možné zabránit zobrazení adresáře, do kterého se provedlo přesměrování, v adresním řádku prohlížeče. Princip je jednoduchý a využívá vnoření stránky do neviditelného rámce (takzvaný cloaking), stejný princip je využit v článku Vlastní přesměrovací služba. Pokud se tedy někomu nelíbí, že jeho stránky mají v adresním řádku prohlížeče i nějaký adresář, může použít tento skript:

<?php
switch (StrToLower($HTTP_HOST)) // převést požadovanou doménu na malé znaky a předat do rozhodnutí switch
{
   case "frantisek.cz": $path = "frantisek.cz/fn/"; $title="Františkovy stránky"; break; // nastavit cestu a titulek stránek
    case "www.frantisek.cz": $path = "frantisek.cz/fn/"; $title="Františkovy stránky"; break;
    case "jirka.cz": $path = "www.jirka.cz/jx/"; $title="Jirka Superman"; break;
    case "www.jirka.cz": $path = "www.jjirka.cz/jx/"; $title="Jirka Superman"; break;
    case "jirka.sk": $path = "www.jirka.sk/jx/"; $title="Jirka Superman"; break;
    case "www.jirka.sk": $path = "www.jirka.sk/jx/"; $title="Jirka Superman"; break;
    default: $path = "frantisek.cz/fn/"; $title="Františkovi stránky";  // výchozí stránka
}
if (!empty($QUERY_STRING)) // pokud jsou zadány nějaké parametry, předat je dále
    $path.="?$QUERY_STRING";
?>
<html>
<head><title><?php echo $title ?></title></head>
<frameset border="0" frameborder="0" framespacing="0" rows="*,0"> // definice "neviditelného" rámce
    <frame src="http://<?php echo $path ?>"> // nastavení url stránky rámce
</frameset>
<noframes>
<body>
<p><center><big><b>
<a href="http://<?php echo $path ?>"><?php echo $title ?></a> // odkaz na adresu stránek v části, která se objeví, pokud browser klienta nepodporuje rámce
</b></big></center></p>
</body>
</noframes>
</html>

Ve skriptu je navíc doplněna proměnná, do které se zadává titulek stránky, který se bude zobrazovat jako titulek rámce, v němž bude cílová stránka zobrazena.

S ohledem na možnosti ukládání odkazů do oblíbených položek preferuji spíše první způsob, ovšem je pochopitelné, že některý klient raději vidí jen to WWW.COSI.CZ a další funkčnost je mu lhostejná.

Nakonec můžeme ještě přímo v každé aplikaci ošetřit případ, kdy by do ní někdo chtěl jít z cizí domény. Jednoduše na začátek skriptu (nebo každého skriptu pomocí include, v závislosti na tom, jak je naše aplikace stavěná) přidáme test, zda je přistupováno ze správné domény. Pokud není, přesměrujeme přímo na adresu zadávané domény – aplikace tedy odepře přístup. Pokud dojde k přesměrování na hlavní adresu domény, dojde, díky již dříve popsanému skriptu, k dalšímu přesměrování na prezentaci, která patří k zadané doméně.

Příklad testovací části, kterou vložíme do stránek prezentace frantisek.cz:

<?php
// test zda jde o volani z domeny frantisek
if (!eregI("frantisek",$HTTP_HOST)) {
  Header("Location: http://$HTTP_HOST/?$QUERY_STRING");
  exit;
}
?>

Pro hromadné používání tohoto testu by bylo dobré si název testované domény vložit do proměnné a tuto nastavovat v nějakém globální souboru prezentace (já používám obvykle config.php), pak nemusí být v této části "natvrdo" nastaveno jméno "frantisek" a celá aplikace bude lehce přenositelná.

Růžička, Pavel (2.8. 2002)
odborný redaktor Interval.cz
Diskuze: Doménové aliasy - ušetřete za webhosting tentokrát ...
2002-08-02 06:35:19Petrcase
2002-08-02 08:03:25FandaSdílení webhostingu
2002-08-02 14:29:39Pavel RůžičkaSdílení webhostingu
2002-08-06 15:37:48TomasViac domen v jednom hostingu
2002-08-07 14:40:57Jméno a příjmeníViac domen v jednom hostingu
2002-09-13 14:18:18Tomas Barejako na free
2003-07-08 11:50:36david honigproc na free?