.htaccess : Jak přesměrovat subdoménu „test“ do adresáře www/subdom/test/www/ ?
Zdravím,
nemohu přijít na to, jak upravit výchozí .htaccess tak, aby byly subdomény obecně, ale třeba i jedna konkrétní přesměrována ne do výchozího adresáře, ale do adresáře o úroveň níže.
Příklad:
Ve výchozím adresáři pro subdomény www/subdom/ mám adresář „test“ (www/subdom/test/) a .htaccess tak jak je nyní po zadání
http://test.mojedomena.cz nasměruje do www/subdom/test/. Chtěl bych ale nasměrovat do www/subdom/test/www/ abych pak mohl do adresáře www/subdom/test/ umístit skripty aplikace a adresář www/subdom/test/www/ pak použít pro veřejné soubory jako jsou obrázky a podobně.
V adresáři www/subdom/test/ bych pak pochopitelně měl .htaccess s obsahem Require all denied
Tedy chtěl byl vědět, jak výchozí .htaccess upravit tak, aby bylo přesměrování ovlivněno jen na konkrétní subdoménu a taky nebo obecně na všechny subdomény.
Děkuji!
2 Answers
Díky za odpověď.
V mé první odpovědi jsem označil kód v závorce jako (originál), čili původní verze .htaccess a (upraveno) jako mnou upravená verze.
OTT: Bohužel před odesláním není vidět náhled formátované verze a nelze odeslaný text ani upravit, jinak bych to třeba tučně zvýraznil.
Podle očekávání funguje jen polovina toho, co jsem chtěl.
Princip: Když si tady koupíte webhosting (neberme teď v potaz adresáře „domain“ a „subdom“), tak na máte nějakou strukturu v kořenovém (domovském) adresáři – nazvěme ho „root“. V tomhle domovském adresáři „/root/“ je pak podadresář „/root/www/“ a ten jediný je dostupný z URL adresy (např. www.tvojedomena.cz). Vše ostatní mimo tento „www“ adresář je veřejně nedostupné, takže ideální místo, kam umístit např. PHP skripty.
První část požadavku:
Když se ale pak bavíme konkrétně o adresáři „/root/subdom/“, ve kterém, když vytvořím podadresář „/root/subdom/test/“, tak celý tento adresář je pak dostupný z URL (např. www.test.tvojedomena.cz). Chtěl jsem zachovat stejný princip jako u hlavní domény (např. www.tvojedomena.cz) a tedy aby u takové subdomény byl veřejně dostupný až adresář „/root/subdom/test/www/“ a pak by mohl adresář „/root/subdom/test/“ opět sloužit pro PHP skripty a byl by také veřejně nedostupný.
Tohoto jsem docílil tím upraveným .htaccess.
Druhá část požadavku:
Zajímalo by mě, jak by se dal .htaccess dále upravit tak, abych mohl na jedné subdoméně používat jako domovský adresář „/root/subdom/test1/“ a tento sloužil taky jako veřejný adresář dostupný z URL (takto funguje originální .htaccess) a zároveň, aby na druhé subdoméně sloužil jako domovský adresář „/root/subdom/test2/“, ale veřejně z URL by byl dostupný až „/root/subdom/test2/www/“.
Tedy chci zkombinovat obě varianty (originál) a (upraveno). Bylo by na .htacces, aby otestoval, zda v domovském adresáři subdomény „/root/subdom/test/“ existuje podadresář „/root/subdom/test/www/“ a pokud by existoval, tak by nastavil tento jako veřejně dostupný z www.test.tvojedomena.cz. A pokud by „/root/subdom/test/www/“ neexistoval, tak by nastavil jako veřejně dostupný „/root/subdom/test/“ z URL www.test.tvojedomena.cz
Je teď už více srozumitelné to, čeho bych chtěl docílit? Děkuji :).
Zdá se, že se mi to podařilo upravit. Pokud je v tom nějaká chyba, tak se nechám rád poučit.
Původně je dokument root přímo v adresáři subomény, takže http://test.tvojedomena.cz/ směřuje do asresáře /www/subdom/test/.
Já tento adresář ale chci použít pro skripty webu, knihovny a další a chci, aby byl dokument root až v podadresáři „www“ tedy /www/subdom/test/www/.
Toho jsem docílil úpravou té části .htaccess souboru týkající se subdomény (originál):
# 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]
Originál jsem změnil takto (upraveno):
# subdomeny (s nebo bez www na zacatku) RewriteCond %{REQUEST_URI} !^subdom/ RewriteCond %{REQUEST_URI} !^/subdom/ RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$ RewriteCond %{DOCUMENT_ROOT}/subdom/%2/www/ -d RewriteRule (.*) subdom/%2/www/$1 [DPI]
Tímto říkáme, že dokument root subdomény je v podadresáři adresáři „www“, takže http://test.tvojedomena.cz/ bude směřovat do adresáře /www/subdom/test/www/.
Stále bych však chtěl ošetřit případ, aby bylo možné používat jak originální, tak upravenou variantu zároveň. Bylo by tedy na .htaccess souboru, aby otestoval, zda v adresáři subdomény existuje podadresář „www“. Pokud by exitoval, tak by přesměroval do toho „www“ adresáře, ale pokud ne, tak by použil přesměrovaní podle originální varianty, tedy přímo do adresáře subdomény.