Autor Zpráva
Sylar
Profil
Zdravím,
potřebuji na jedné doméně vytvářet automaticky (scriptem) subdomény. Support webhostingu mi řekl, že je potřeba nastavit tzv. "hvězdičkový záznam" kvůli DNS. Když ale nyní vytvořím scriptem subdoménu, zobrazí se na ní obsah hlavní domény, tedy to, co je na www.domena.cz. Podle supportu webhostingu to lze vyřešit htaccessem s obsahem
   RewriteEngine On
   RewriteBase /
   RewriteCond %{HTTP_HOST} !www.domain.com$ [NC]
   RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC]
   RewriteRule (.*) %2/$1 [L]

když ale toto upravím pro své potřeby hází mi to Internal server error . Navíc jak jsem zjistil, tento kód mi přesměrovává subdomény http://text.domena.cz do složky http://domena.cz/test/ což není přesně to co potřebuji.
Potřebuji subdoménu http://test.domena.cz přesměrovat do složky test.domena.cz, která je v rootu (na stejné úrovni jako složka s hlavní doménou), ale aby ji nesežral hvězdičkový záznam.
Davex
Profil
Chyba nastane z důvodu zacyklení přepisu - musí se přidat podmínka proti zacyklení. Inspiruj se v tématech

přesměrování složka -> subdoména
Htaccess a různé domény
htaccess nahradenie domena.sk za automatickú hodnotu
Sylar
Profil
Davex:
z těch vláken jsem vyzjistil, že tento zápis
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{HTTP_HOST} ^(?:www\.)?([^.]+\.)?([^.]+\.[^.]+)$ [NC]
RewriteRule .* /%1%2/$0 [L]

by měl přesměrovávat subdomény abc.example.com do složky - to funguje. Jen ještě drobnost, já bych potřeboval do složky ../abc.example.com protože na mém hostingu jsou složky domén a subdomén následovně
/example.com - zde je i výše uvedený kód v htaccessu
/subdomain.example.com
/another-subdomain.example.com

a ještě jak jsem nyní zjistil, tak když dám hlavní doménu (www.)example.com tak mi to hodí chybku o smyčce při přesměrování.
Davex
Profil
Aby pravidla v souboru .htaccess fungovala i pro subdomény, tak musí být hlavní doména i subdomény nasměrovány do stejného prostoru. Pokud budou v oddělených adresářích tak se pravidla v souboru /example.com/.htaccess provedou pouze pro URL s doménou example.com.

Záleží na nastavení webserveru, které nejde přímo ovlivnit. Když nevytvoříš adresáře pro subdomény na stejné úrovni jako adresář example.com, ale jako jeho podadresáře, tak to nepomůže?
Sylar
Profil
Davex:
pomůže a subdomény fungují OK. ale nefunguje mi zase hlavní doména :D :( ...
abychom nechodili pořád po slepu tak tato subdoména funguje http://www.abc.eportfolio.cz/ (to, že hází jiné errory prosím přejdi). ale už nefunguje hlavní doména www.eportfolio.cz - smyčka při přesměrování
htaccess u hlavní domény obsahuje následující zápis
RewriteEngine On
RewriteBase /

# přesměrování subdomén do složek
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{HTTP_HOST} ^(?:www\.)?([^.]+\.)?([^.]+\.[^.]+)$ [NC]
RewriteRule .* /%1%2/$0 [L]

# přesměrování na www
RewriteCond %{HTTP_HOST} ^eportfolio.cz
RewriteRule (.*) http://www.eportfolio.cz/$1 [R=301,QSA,L]

# přesměrovávání z index.php na / 
RewriteRule ^index\.php$ $1 [R=301,QSA]

# cool URL - page
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/?$ ?page=$1 [QSA]


a struktura složek je tedy nyní následující

eportfolio.cz - hlavní doména // nefunguje
eportfolio.cz/abc.eportfolio.cz/ - subdoména // funguje
Davex
Profil
Toto rozhazování subdomén do podadresářů nemám rád, protože to přináší spoustu problémů.

1) Pokud má hlavní doména zůstat v kořenovém adresáři, tak se nesmí přepisovat do podadresáře. Patří tam přidat podmínka:
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{HTTP_HOST} !^(?:www\.)?[^.]+\.[^.]+$ [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?([^.]+\.)?([^.]+\.[^.]+)$ [NC]

2) V pravidle pro odstranění indexu by mělo být lomítko místo $1

3) Poslední přepisovací pravidlo se bude provádět i na subdoménách, ale ne v kontextu adresáře subdomény, takže v hodnotě parametru page bude i cesta k subdoméně.

4) Pokud tam dochází ke smyčce přesměrování, tak mohou některé pravidla kolidovat, ale www.eportfolio.cz se mi PHP skriptem přesměrovalo na /404.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: