Autor | Zpráva | ||
---|---|---|---|
forkman Profil * |
#1 · Zasláno: 22. 4. 2010, 12:03:08
Ahoj, řeším už pěknou dobu problém, že na serveru mám asi 15 domén a vždycky, když přibyde nová, musím ručně upravit htaccess, ale by i non-www verze nové domény přesměrovávala na variantu s www. Už mě to dost otravuje, poradili byste mi prosím, jak udělat takovéto pravidlo nezávislé na názvu domény a TLD?
RewriteCond %{HTTP_HOST} ^example\.cz RewriteRule example.cz/www/(.*) http://www.example.cz/$1 [R=301,QSA,L] Vygooglil jsem něco takového, ale to mi bohužel nefunguje a nevím jak se to dá ladit :-( RewriteCond %{HTTP_HOST} ^([^.]*)\.([^.]*)$ RewriteRule %{HTTP_HOST}/www/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,QSA,L] |
||
Kajman_ Profil * |
#2 · Zasláno: 22. 4. 2010, 12:50:37
Ono asi není možné dávat 4 a % proměnné do prvního parametru rewriterule, jen do druhého. Možná by šlo udělat tu podmínku na cestu přes další rewritecond (ale nejsem si jistý, jestli tam bude %{HTTP_HOST}/www/ nebo jen ta závorka).
RewriteCond %{HTTP_HOST} ^([^.]*)\.([^.]*)$ RewriteCond %{REQUEST_URI} %{HTTP_HOST}/www/(.*) RewriteRule .* http://www.%{HTTP_HOST}/%1 [R=301,QSA,L] K ladění lze zapnout rewritelog, ale pro ostrý provoz se moc nedoporučuje jeho zapnutí (s vysokým levelem informování). |
||
__construct Profil |
#3 · Zasláno: 22. 4. 2010, 12:58:37 · Upravil/a: __construct
Podľa mojich znalostí regexpov by malo toto fungovať:
RewriteCond %{HTTP_HOST} ^(?!www\.)([a-zA-Z0-9-]+)\.([a-z]{2,4}) RewriteRule %{HTTP_HOST}/www/(.*) http://www.%{HTTP_HOST}/$1 [R=301,QSA,L] |
||
Davex Profil |
#4 · Zasláno: 22. 4. 2010, 18:29:58 · Upravil/a: Davex
forkman:
Jednoduché doplnění www před všechny domény druhého řádu by mohlo fungovat takto: RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{REQUEST_METHOD} !=POST RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+)$ RewriteRule ^(.*)$ http://www.%1/$1 [R=301,NE,L] Občas se může hodit i doplnění www před libovolnou subdoménu: RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{REQUEST_METHOD} !=POST RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,NE,L] |
||
forkman Profil * |
#5 · Zasláno: 23. 4. 2010, 07:25:52
2 Kajman_ & __construct: Bohužel vaše řešení nic nematchne, ale mám tak trochu speciální případ a proto je s tím tolik problémů:)
2 davex: Tvoje řešení tak na půl funguje, ale nezohledňuje to první část mého původního RewriteRule. Abych popsal můj speciální případ: Jelikož moje lenost je nekonečná, mám Apače nastaveného na dynamické vhosty, tzn, že ve /var/www vytvořím adresář s názvem domény, v něm vytvořím adresář www a už to funguje (pak to vypadá např takhle /var/www/example.cz/www) a to je právě ten kámen úrazu. Htaccess na přesměrování na www mám přímo ve /var/www a ten musí zohlednit, že z adresáře /var/www mě to musí přesměrovat do example.cz/www, ale tuhle část už to nemůže nacpat do uri stránky, prostě to přesměrovává takhle: http://www.example.cz/example.cz/www/ Pokoušel jsem se to RewriteRule upravovat, ale nějak tomu nerozumím :-) Potřeboval bych něco jako tohle, ale to bohužel nefunguje: RewriteRule ^%1/www/(.*)$ http://www.%1/$1 [R=301,QSA,L] |
||
__construct Profil |
#6 · Zasláno: 23. 4. 2010, 09:08:06
Dovolím si citovať výrok Briana Moorea:
''Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. '' RewriteEngine on RewriteCond %{HTTP_HOST} ^(?!www\.)([a-zA-Z0-9-]+)\.([a-z]{2,4}) RewriteRule ^(.+) http://www.%1/$1 [C] RewriteRule /var/www/%{HTTP_HOST}/www/(.*) http://www.%{HTTP_HOST}/$1 [R=301,QSA,L] |
||
forkman Profil * |
#7 · Zasláno: 24. 4. 2010, 12:04:47
Tak vyjadřuju svůj absolutní souhlas, že mod_rewrite je voodoo, protože tvůj poslední nápad dělá to, že example.cz přesměruje na http://www.example.com/example.cz/www/ a absolutně vůbec netuším, jak si to může vymyslet jinou TLD. Mám tam domény s TLD cz a net a u obou se to přesměruje vždycky na com. Fakt voodoo. Kdybych tomu aspoň rozumněl ... :-)
|
||
Časová prodleva: 3 dny
|
|||
Davex Profil |
#8 · Zasláno: 27. 4. 2010, 22:09:05
forkman:
„mám Apače nastaveného na dynamické vhosty“ To je docela podstatná informace. Tím se nastavení samozřejmě komplikuje a záleží na tom, jak máš nakonfigurovaný mod_vhost_alias. Mod_rewrite za to nemůže, protože zpracovává jinou cestu než v obvyklé konfiguraci s VirtualHosty. Nevím přesně, jak máš nastavené dynamické vhosty, ale mělo by stačit přidat na začátek regulárního výrazu rozlišení podadresáře od umístění souboru .htaccess: RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+)$ RewriteRule ^[^.]+\.[^.]+/(?:www/)?(.*)$ http://www.%1/$1 [R=301,QSA,L] |
||
Časová prodleva: 2 měsíce
|
|||
forkman Profil * |
#9 · Zasláno: 15. 6. 2010, 20:41:06
Dík moc, tohle už zabralo, odvážil jsem se to vyzkoušet až teď, protože to je na ostrém serveru. Ještě jednou díky!
|
||
Časová prodleva: 14 let
|
0