Jak mám nastavené .htaccess na hostingu wedos

Pátek, Říjen 7, 2011

Na hostingu Wedos je možné používat více domén v jednom hotingovém programu a je také možné vytvářet libovolné množství subdomén jen vytvořením dalšího adresáře ve výchozí struktuře kořene webu. Směrování do jednotlivých adresářů je zde řešeno pomocí .htaccess, který po vytvoření hostingu obsahuje toto:

RewriteEngine On

# cele domeny (aliasy)
RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteRule (.*) domains/%2/$1 [DPI]

# subdomeny (s nebo bez www na zacatku)
RewriteCond %{REQUEST_URI} !^subdom/
RewriteCond %{REQUEST_URI} !^/subdom/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/subdom/%2 -d
RewriteRule (.*) subdom/%2/$1 [DPI]

# aliasy - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^domains/[^/]+/(.+[^/])$ /$1/ [R]

# subdomeny - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^subdom/[^/]+/(.+[^/])$ /$1/ [R]

Adresářová struktura na hostingu, pak může vypadat třeba takto:

domains -> web1.cz
        -> web2.cz
        -> web3.cz
subdom -> subdomena1
subdom -> subdomena2

Vytvoření nového adresáře ve složce domains vytvoří prostor pro doménu, která bude do tohoto adresáře směrována. Vytvoření nového adresáře v subdom vytvoří nový prostor pro subdoménu.

Veškeré subdomény ze všech domén jsou směrovány do adresáře subdom. Problém nastává, pokud chci mít na adrese subdomena1.web1.cz jeden web a na doméně subdomena1.web2.cz druhý, pak nelze toto nastavení použít, protože obojí si šáhne do adresáře subdom/subdomena1, kde najde jeden a ten samý obsah.

Proto je vhodné použít tuto strukturu, která mi také mnohem víc vyhovuje:

domains -> web1.cz -> www
                   -> subdomena1
        -> web2.cz -> www
                   -> subdomena1
                   -> subdomena2
        -> web3.cz -> www

Pro tuto strukturu používám tento soubor .htaccess:

RewriteEngine On
RewriteBase /

# presmerovani na variantu s www
RewriteCond %{HTTP_HOST} ^([^\.]*)\.([^\.]*)$
RewriteRule (.*) http://www.%1.%2 [L,R=301]

# cele domeny (aliasy)
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^([^\.]*)\.([^\.]*\.[^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteCond %{DOCUMENT_ROOT}/domains/%2/%1 -d
RewriteRule (.*) /domains/%2/%1/$1 [L]

# neexistuje subdomena, pak jdi na www
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^([^\.]*)\.([^\.]*\.[^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteRule (.*) /domains/%2/www/$1 [L]

V první části je vyřešena situace kdy někdo zadá adresu jako http://domena1.cz, pak bude přesměrován na http://www.domena1.cz.

V druhé části je pak řešeno směrování na jednotlivé adresáře. Adresa http://subdomena1.domena1.cz bude směrováno do /domains/domena1.cz/subdomena1/. Z tohoto chování je zřejmé, že adresa http://www.domena1.cz bude nasměrována na /domains/domena1.cz/www/. Adresář www tedy musí vždy existovat.

Ve třetí části je řešen případ, kdy je zadaná adresa http://subdomena1.domena1.cz a adresář /domains/domena1.cz/subdomena1/ neexistuje. V tom případě je vše směrováno do adresáře /domains/domena1.cz/www/, což je taky další důvod proč musí vždy existovat jinak dojde k chybě.

Toto chování také využívám například na webu aclanky.cz, kdy je vše směrováno do /domains/aclanky.cz/www/ a když chci vytvořit nový web na subdoméně, tak aby jej nezachtával hlavní web, pak stačí jen vytvořit patřičný adresář a vše bude směrováno do něj.

 

11 Comments

  1. Petr Šťastný, WEDOS napsal:

    Nemusel jste .htaccess upravovat, stačilo vytvořit adresáře domains/subdomena1.web1.cz a domains/subdomena1.web2.cz

  2. Jan Havlůj napsal:

    Díky za příspěvek!
    Mám jen jeden dotaz, kde je nyní root webhostingu? Resp. na wedosu je složka www/ kam umisťujeme soubory a složky a v ní se nachází i adresář domains/. Mám-li tedy webhosting přímo k nějaké doméně, nebude to alias, tak web musím nahrávat do složky www/ nebo je to možné nahrát do složky domains/, kde bude složka pro danou adresu a tudíž nechat složku www/ prázdnou obsahující pouze složku domains/ a soubor .htaccess? Nebo musím obsah webu nahrát do složky www/? Pokud ano, není nějaké řešení jak to udělat, abych web umisťoval k ostatním tedy do složky domains/název/?

    1. admin napsal:

      Jakýkoli web ať už se jedná o klasickou doménu nebo o alias se umisťuje právě do /domains/název/. Díky tomu to získává na přehlednosti. Ve složce www je pak pouze složka domains. Já do www někdy přidávám soubory, které mají něco společného s prezentací ale nechci aby se k nim nikdo dostal.

  3. DraG napsal:

    Wedos je perfektní. Doporučuji.

  4. VlaDog napsal:

    Řeším teď multisite WP na Wedosu. Podle toho co píšeš to vypadá jako zajímavé řešení mám dvě otázky.
    1) Řeší toto problém s vytvářením subdomén pro Multisite WP na wedos?
    2) Jak je řešena hlavní doména hostingu v administraci wedosu?

    K Multisite WP má někdo zkušenosti s tímto řešením na Wedosu. Řešení Wedosu ukládáním subdomén do adresáře subdom/subdomena1 mi dělá vrásky v multisite.
    Díky za každou radu.

    1. admin napsal:

      Jestli chceš používat multisite ve WP, pak nahraj WP do adresáře www a subdomény budou fungovat tak jak mají nemusíš nic dalšího dělat. … Jestliže pak například vytvoříš vedle adresáře www další adresář např. subdomena1. Tak adresa subdomena1.tvaDomena.tld se nasměruje do domains/tvaDomena.tld/subdomena1 takže tam můžeš použít co chceš. Když pak zadáš cokoli jiného např. subdomena2.tvaDomena.tld a adresář domains/tvaDomena.tld/subdomena2 neexistuje, pak se bude směrovat do domains/tvaDomena.tld/www kde bude WP a on se už o to postará.

  5. Jindra napsal:

    Dobrý den, mám problém. Před časem jsem si koupil doménu i s hostingem i wedosu ( http://www.wackyvids.net ) .. Včera jsem se ale rozhodl rozject více webů a proto jsem si aktivoval službu více aliasů (1 hosting pro více webů) .. Koupil jsem si druhou doménu ( http://www.htc-one.cz ) a vše nastavil podle návodu na stránkách wedosu. Vytvořil jsem adresář www/domains/htc-one.cz a do této složky nahrál obsah nového webu. Samozřejmě jsem také použil wedosácký htaccess.. Pokud zadám adresu htc-one.cz , vyskoří index zcela správně … css script už ale nefunguje , po zadání http://www.htc-one.cz/index.css se zobrazí výchozí stránka wackyvids s chybovou stránkou 404 … nevíte prosím co s tím ? Děkuji

    1. admin napsal:

      Je to docela zvláštní. Nenahrál jste tam špatný .htaccess soubor? Takhle bez přístupu na server se to špatně odhaduje. Každopádně pokud použijete můj .htaccess a mou adresářovou strukturu, tak vše bude fungovat.

  6. Pavel napsal:

    Zdravím, mám na Wedos serveru Váš skript z druhé části článku, ale potřeboval bych tam ještě doplnit.

    Pokud nekdo zadá http://www.subdomena.domena.cz aby se to přesměrovalo na subdomena.domena.cz – mnoho uživatelů neví že u subdomeny není www a umažou v prohlížeči část odkazu a doplní ten se subdoménou.

    A přesměrování HTTPS na HTTP. Opět problém u uživatelů, kteří si konkrétně umažou část odkazu v chrome kde jim zůstane po vyhledávači google.cz https:// a opět nevědí, že toto je naprosto jiný typ odkazu.

  7. Pavel napsal:

    Teď jsem si přečetl ten můj Komentář znovu, a moc se omlouvám za tón jakým byl napsán.

    Chtěl bych Vás poprosit, jestli by to bylo možné doplnit. Myslím si, že u BFU uživatelů se uvedené situace stávají velmi často. Mám to i z vlastní zkušenosti od uživatelů internetu v okolí.

Napsat komentář