Autor Zpráva
pavel k.
Profil *
Ahoj,

před nějakou dobou mi zdejší diskutér Davex ušil na míru pro moji doménu třetího řádu soubor .htaccess ve tvaru

RewriteEngine On
 
# podstrčení PHP, přepsat pouze na existující skript
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+)$    $1.php    [L]
 
# podstrčení HTML, přepsat pouze na existující soubor
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^.]+)$    $1.html    [L]

# přesměrování na verzi bez přípony, pokud ještě není přepsáno a není to POST požadavek
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.php$ http://www.subdomain.example.com/$1 [L,R=301,NE]

RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ([^.]+\.[^.]+\.[^.]+)$
RewriteRule ^(.*) http://www.%1/$1 [R=301,QSA,L,NE]

Jedna z mých tehdejších žádostí byla, aby se stránky zobrazovaly s úvodním www a aby byly všechny stránky bez www přesměrovány na verzi s www. Jako na potvoru jsem si to teď rozmyslel a rád bych to měl naopak (tzn. aby se www nezobrazovalo a aby byly všechny stránky s www přesměrovány na verzi bez www), ale zbytek podmínek/příkazů/vlastností chci mít stejný jako mám teď.

Rád bych tudíž požádal Davexe či někoho, kdo se v zápisu vyzná (narozdíl ode mne), zda-li by byl laskav a mohl by mi kód v souboru upravit dle představ?

Díky předem :-)
Kajman
Profil
Pozor na to, že prohlížeče či další zpracovatelé stránek si mohou nějakou dobu kód 301 pamatovat, pokud tam uděláte přesměrování na verzi bez www, tak se prohlížeč zasekne ve smyčce a vypíše uživateli chybu (pokud v poslední době šel na verzi bez www).

Osobně bych domény už neměnil. Pokud na tom trváte, tak zrušte současné přesměrování (řádky 11-20). A třeba po týdnu nebo po dvou teprve dejte přesměrování nové. Něco jako

RewriteEngine On

#u domen 3.radu odstranit www
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{HTTP_HOST} ^www\.([^.]+\.[^.]+\.[^.]+)$
RewriteRule ^(.*) http://%1/$1 [R=302,L,NE]

# přesměrování na verzi bez přípony, pokud ještě není přepsáno a není to POST požadavek
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.(php|html)$ /$1 [R=302,L,NE]

# podstrčení PHP, přepsat pouze na existující skript
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+)$    $1.php    [L]
 
# podstrčení HTML, přepsat pouze na existující soubor
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^.]+)$    $1.html    [L]

A po dalším týdnu nebo dvou teprve změňte 302 na 301.
pavel k.
Profil *
Kajman:
Nevím, jestli si dobře rozumíme.

... vypíše uživateli chybu (pokud v poslední době šel na verzi bez www)
I kdyby šel uživatel v poslední době na verzi bez www, tak ta ho přeci přesměruje na verzi s www (takže de facto verze s www nyní neexistuje, je to tak?)

Osobně bych domény už neměnil.
Nemám v plánu změnu domény. Z domény třetího řádu chci jen vyhodit přebytečné www, takže místo www.subdomain.example.com by bylo subdomain.example.com (tzn. doména třetího řádu by byla i nadále zachována).

Původně jsem si myslel, že se jen v řádku č.15 smaže "www.", případně se to samé udělá ještě na řádcích 18 a 20...


Kajman
P.S. řádky 11-20 jsem si myslel, že mažou příponu (tzn. .php) z URL... Ale jak říkám, nerozumím tomu a tak mi nezbyde než vyzkoušet vaše řešení...
Kajman
Profil
pavel k.:
I kdyby šel uživatel v poslední době na verzi bez www, tak ta ho přeci přesměruje na verzi s www

A na www mu nachystáte přesměrování na verzi bez www. Takže tu je opět požadavek na verzi bez www, kde je zapamatováno přesměrování na verzi s www. Prohlížeč bude skákat stále mezi dvěma přesměrování, až mu dojte trpělivost a uživateli vypíše chybu způsobenou smyčkou přesměrování.

Nemám v plánu změnu domény.

Máte. www.subdomain.example.com a subdomain.example.com jsou dvě různé domény.
pavel k.
Profil *
Kajman:
Rozumím a rozumím. Díky ještě jednou.

Smažu nynější řádky 11-20, za měsíc vložím vaší verzi .htaccess a za další měsíc změním 302 na 301. Kdyby to nefungovalo dle představ, dovolím si znovu napsat.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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