Több domain 1 gépre irányítása

Ma belefutottam egy problémába: mi van akkor, ha otthoni kis házi szerverünk van, és regisztrálunk hozzá egy domain-t pl. a www.no-ip.com-on. Egyszerű az eset: az index.html vagy index.php oldalunk megjelenik.

De mi van akkor, ha mi már több különböző domaint regisztrálunk és azt szeretnénk, hogy a címet beírva azonnal az adott oldal töltődjön be, anélkül, hogy a felhasználó a többiről tudomást szerezne.

Mivel nem volt kedvem szervert konfigolni inkább egy másik utat találtam ki:

index.php

<?PHP
$dirs[‘gyik.sytes.net’] = ‘gyik’;
$dirs[‘tutorial.hu’] = ‘tutorial’;

if($_SERVER[‘REQUEST_URI’] == ‘/’)
{
$uri = ‘/index.php’;
}
else
{
$uri = $_SERVER[‘REQUEST_URI’];
}

if(array_key_exists($_SERVER[‘HTTP_HOST’], $dirs))
{
if(!file_exists($dirs[$_SERVER[‘HTTP_HOST’]] . $uri))
{
print "A keresett file nem található a szerverünkön!";
exit;
}
else
{
chdir($dirs[$_SERVER[‘HTTP_HOST’]]);
ini_set("include_path", $dirs[$_SERVER[‘HTTP_HOST’]] . PATH_SEPARATOR . ini_get("include_path"));
include($dirs[$_SERVER[‘HTTP_HOST’]] . $uri);
}
}
?>

Mit csinál ez a kód?
A kódban – mint ahogy az az első két sorban italic-al ki van jelölve – akárhány domain nevet megadhatunk a következő formában:

kód

$dirs[‘domain név‘] = ‘könyvtár neve‘;

Ebben az esetben a domain név NE tartalmazza a http:// protokoll előtagot, se filenevet, és a végén ne legyen ott a / jel.
Pl.:
gyik.sytes.net -> Jó
gyik.com -> Jó
http://www.gyik.com/ -> Rossz
http://www.gyik.com/index.php -> Rossz

Na visszatérve eredeti kérdésünkre… A szkript maga annyit csinál, hogy a dőlt-tel (italic) jelzett sorok feltöltenek egy ún. (egy dimenziós) tömböt (array), amelyben az elemek kulcsa (neve – key) az adott domain név, az értéke pedig az a könyvtár, ami az adott domain névnél a DocumentRoot értéket kell, hogy felvegye.

Ezután megnézi, hogy van-e olyan elem a fentebb feltöltött tömbben, amelynek a kulcsa megegyezik azzal a domain-el, amiről a felhasználó információkat töltött le. (Ezt a PHP a $_SERVER[‘HTTP_HOST’] változóban tárolja).
Ha talál ilyet, akkor megnézi, hogy a hozzá tartozó könyvtárban létezik-e olyan nevű file, amit a felhasználó lekért. Ha igen, akkor beállítja, hogy az esetleges include és require függvényeknél az adott könyvtárban is keresse a fileokat, és "behúzza" azt a filet. Ha nem talál, akkor visszadob egy üzenetet, hogy "404 – A keresett file nem található szerverünkön!"

Ha viszont az adott domain-hez nincs megadva könyvtár, akkor a user kap egy üzenetet, hogy eltéved az internet dzsungelében, és bocs.. :)
Remélem más is hasznát veszi, nekem tetszik, mert nem kell szenvednem a szerver konfiggal…

Egy ötletként megjegyezném, hogy az index.php-vel azonos könyvtárba érdemes egy .htaccess fájlt is elhelyezni, melynek a tartalma a következő legyen:

.htaccess

ErrorDocument 404 /index.php

Ezután bármely fájlt próbálják meghívni a szerveren (pl. egy teszt.php-t, vagy egy nemlétező phpinfo.php-t), mindig az index.php-ra fognak jutni. Ez köszönhető annak, hogy a nemlétező fájl meghívásakor egy 404-es hibát kapnak, ami meghívja az index.php-t.

(Zárójeles megjegyzés: a tutorial-ban szereplő módszert még akkor is érdemes használni, ha pl. ingyenes szolgáltatónál van egy regisztrált tárhelyünk, és ugyanarra a tárhelyre több különböző oldalt szeretnénk feltenni.)

A szkript egyetlen apró szépséghibája, hogy a kezdőlapunknak MINDENKÉPP index.php-nak kell lennie minden domain esetében!
Ha más nincs, nevezzük át a html filet, az eredmény ugyanaz lesz.

szerző: BlackY

1 hozzászólás

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét