Autor Zpráva
Amunak
Profil
Jak mám napsat pravidla pro mod_rewrite tak, aby když…

přijdu z example.com se načítal obsah z adresáře /www.example.com
přijdu z www.example.com se načítal obsah z adresáře /www.example.com
přijdu z subdomena.example.com se načítal obsah z adresáře /subdomena.example.com
přijdu z sub-subdomena.subdomena.example.com se načítal obsah z adresáře /subdomena.example.com/sub-subdomena

přijdu z jina.com se načítal obsah z adresáře /www.jina.com
přijdu z www.jina.com se načítal obsah z adresáře /www.jina.com
přijdu z subdomena.jina.com se načítal obsah z adresáře /subdomena.jina.com
přijdu z sub-subdomena.subdomena.jina.com se načítal obsah z adresáře /subdomena.jina.com/sub-subdomena

…atd., a bylo to prostě univerzální.

Jako základ by myslím šlo použít tohle:
RewriteCond %{REQUEST_URI} !^/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{DOCUMENT_ROOT}/%2 -d
RewriteRule (.*) /%2/$1 [L]


ale moc si tím nejsem jistý.

Zároveň bych chtěl taky udělat, aby se na to nedalo přistupovat přes tu původní adresářovou strukturu (aby někdo nemohl zadat třeba example.com/www.jina.com atd…
Davex
Profil
Nedoporučuji přepisovat do podadresářů podle domény nebo subdomény pravidly v .htaccess. Jsou s tím jenom problémy - viz htaccess nahradenie domena.sk za automatickú hodnotu.
Amunak
Profil
Davex:
Prošel jsem to vlákno a myslím, že mě se zmíněné chyby netýkají

Myslíš si ale tedy, že by bylo lepší to udělat "ručně" a vypsat to pro každou (sub)doménu zvlášť? Vždyť tomu většina úskalí stejně zůstane.

Jak to tedy udělat tak, jak jsem chtěl? Koukal jsem na to odkazované téma, ale to co tam je se mi příliš nehodí.

Díky za odpověď.
Amunak
Profil
Davexi, poradíš mi tedy, prosím tě? Netuším, jak ty výrazy sestavit. S reguláry nejsem zrovna kamarád.
Davex
Profil
Jde upravit pravidlo z odkázaného vlákna, ale protože nejsou adresáře subdomén umístěny ve společném podadresáři, tak se musí změnit i podmínka proti zacyklení (ve stylu pravidel z Soubor .htaccess - virtuální subdomény - problém).

RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{HTTP_HOST} ^(?:www\.)?([^.]+\.)?([^.]+\.[^.]+)$ [NC]
RewriteRule .* /%1%2/$0 [L]

Trochu jsem původní požadavek zjednodušil a bude se (doufám, nezkoušel jsem to) přepisovat
example.com/soubor → /example.com/soubor
www.example.com/soubor  →  /example.com/soubor
subdomena.example.com/soubor → /subdomena.example.com/soubor
www.subdomena.example.com/soubor → /subdomena.example.com/soubor

Pro jinou subdoménu 4. řádu by se muselo ještě přidat další pravidlo:

RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{HTTP_HOST} ^([^.]+)\.([^.]+\.[^.]+\.[^.]+)$
RewriteRule .* /%2/%1/$0 [L]

Upozorňuji, že s tím mohou být problémy a pokud budou mít domény vlastní soubory .htaccess, tak v nich pravidla nemusí pracovat správně.
Amunak
Profil
Super, funguje to, obojí. Akorát se ještě zeptám, jak tam přidat přesměrování z verze bez www na verzi s www?

Ale jen u domény druhého řádu, u těch nižších bych byl radši kdyby to přesměrovávalo přesně naopak :-D

Doufám, že si moc nevymýšlím.
Davex
Profil
Doplnění www před doménu 2. řádu - viz RewriteRule pro redirect non-www na www pro všechny domény

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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