Autor Zpráva
Meldo
Profil
Zdravím,

rád by som vyriešil presmerovanie rôznych typov domény na jednu jedinú s použitím čo najmenšieho množstva presmerovaní. Exsitujú tieto možné prípady:

http://domena.sk
http://www.domena.sk
http://domena.sk/index.php
http://www.domena.sk/index.php

a rád by som to presmeroval na

https://www.domena.sk

ideálne jedným jediným presmerovaním. Všimol som si, že mall.sk to má nejak vyriešené. Je tam proste len jeden redirect nech to zadám akokoľvek. (overiť redirecty sa da tu: tools.pingdom.com/fpt/#!/cvk2RV/mall.sk)

Existuje nejaky redirect na to? Momentálne používam:

RewriteCond %{HTTP:HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]

RewriteCond %{HTTP_HOST}  ^domena.sk$
RewriteRule (.*) https://www.domena.sk/$1 [R=301,QSA,L]

RewriteCond %{REQUEST_URI} ^/index.php$ [NC] 
RewriteRule ^(.*)$ https://www.domena.sk/ [R=301,NE,L]
v tomto poradí, čo ale spôsobuje až tri redirecty na nájdenie správnej varianty v prípade zadania domena.sk
Kajman
Profil
Stačí přehodit pořadí.


RewriteCond %{REQUEST_URI} ^/index.php$ [NC] 
RewriteRule ^(.*)$ https://www.domena.sk/ [R=301,NE,L]

RewriteCond %{HTTP_HOST}  ^domena.sk$
RewriteRule (.*) https://www.domena.sk/$1 [R=301,NE,L]

RewriteCond %{HTTP:HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,NE,L]
Meldo
Profil
Nakoniec som to vyriešil takto. V poradí:

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.domena.sk/$1 [R=301,L]

RewriteCond %{REQUEST_URI} ^/index.php$ [NC] 
RewriteRule ^(.*)$ https://www.mojvibrator.sk/ [R=301,NE,L]

Prvá podmienka rieši presmerovanie na www verziu a zároveň https.
Kajman
Profil
Ale při zadání http://domena.sk/index.php se zase provedou dvě přesměrování a při zadání https://domena.sk/ se adresa neupraví.
Meldo
Profil
Kajman: díky za pomoc. Máš pravdu, upravil som to ale ešte to stále nie je úplne ono.

Aktuálny kód:
RewriteCond %{REQUEST_URI} ^/index.php$ [NC]
RewriteRule ^(.*)$ https://www.domena.sk/ [R=301,NE,L]
 
RewriteCond %{HTTP_HOST} ^domena.sk$
RewriteRule (.*) https://www.domena.sk/$1 [R=301,NE,L]

RewriteCond %{HTTP:HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,NE,L]

Problém je, že ak mám niečo za lomítkom, presmeruje to vždy na root domeny. Napr.:

www.domena.sk/kontakt
domena.sk/kontakt

vždy to ide na https://www.domena.sk/index.php a potom na https://www.domena.sk/

Možno by stálo za zmienku, že pred týmito presmerovaniami mám toto:
RewriteRule !(\.(.+))$ index.php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/

Vieme prosím aj toto vyriešiť?
Kajman
Profil
Přesměrovací pravidla dejte před to přepisování a přidejte k tomu prvnímu přesměrování podmínku, že není již interně přepsáno.

RewriteCond %{ENV:REDIRECT_STATUS} =""

A RewriteCond patří k RewriteRule, které je nejlbíže pod ním, pozor na to.
Meldo
Profil
Kajman si génius :)

Tak len pre budúcnosť pre ostatných, kompletný funkčný kód:

#==================================================================================
#presmerovanie index.php na root /
#==================================================================================
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{REQUEST_URI} ^/index.php$ [NC]
RewriteRule ^(.*)$ https://www.domena.sk/ [R=301,NE,L]
 
#==================================================================================
#presmerovanie non-www na www adresu
#==================================================================================
RewriteCond %{HTTP_HOST} ^domena.sk$
RewriteRule (.*) https://www.domena.sk/$1 [R=301,NE,L]

#==================================================================================
#presmerovanie http na https
#==================================================================================
RewriteCond %{HTTP:HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,NE,L]

#==================================================================================
#odstrani posledne lomitko na konci url adresy
#==================================================================================
RewriteRule ^(.+[^/])/$ /$1 [R=301]

#==================================================================================
#spracovanie url
#==================================================================================
RewriteRule !(\.(.+))$ index.php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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