Autor Zpráva
S3RIO2
Profil
Ahoj,

trošku si ze mě dělá srandu htaccess po přechodu na HTTPS (hosting wedos). Potřebuji aby se všech přesměrovávalo na adresu s www. a https://, tož znamená že pokud mám web v adresáři /domains/domena.tld/ potřebuji aby konečná adresa byla ve tvaru https://www.domena.tld

Výchozí wedosácký htaccess (který je u adresářů domains, subdom) je v původním tvaru. Htaccess který mám v adresáři /domains/domena.tld/ mám v podstatě nyní akorát pro omezení přístupu na ip adresu. Když si vyhledám nějaký příklad redirectu na www. a https a vložím jej do prvního nebo druhého htaccess udělá to vždy nějakou paseku. Například mám v adrese 2x www., nebo mě vypisuje do adresy i adresář /domains/domena.tld/ apod.

Dokáže mě tedy prosím někdo přímě poradit, kdo má u wedosu odzkoušeno?

BTW. Využívám jen SNI + Let's encrypt, PHP5.6

Moderátor Davex: Titulek „htaccess - WEDOS - HTTPS“ nevystihoval podstatu dotazu. Příště zkus prosím vymyslet lepší.
Kajman
Profil
Nemám to tam odzkoušeno, ale zkusil bych na začátek hlavního .htaccess přidat např. něco takového...

RewriteEngine On

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

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


A pokud se to bude chovat dobře, změňte 302 na 301. www prefix se tam neřeší pro domény třetího a vyššího řádu.
S3RIO2
Profil
Vypadá, že je funkční. Děkuji. :-)
Exik
Profil
Nasla by se i verze pro windows (web.config na IIS8) ?
Tomášeek
Profil
Kajman:
Uvedený kód se mi cyklí. Zadám do prohlížeče HTTP variantu, dostanu chybu ohledně zacyklení přesměrování. V HTACCESS zakomentuji, refreshnu a jsem na HTTPS variantě webu. K přesměrování webu na HTTPS tedy došlo, nicméně prohlížeč/server chtěl přesměrovávat i nadále, až se zacyklil.

Kód:
RewriteEngine on

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

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

#puvodni pravidlo, přesměrování z non-www na www (zkoušel jsem modifikovat i na https://www.domena.cz, i toto zakomentovat a ponechat jen řádky výše, výsledek vždy stejný, zacyklení)
RewriteCond %{HTTP_HOST} ^domena.cz
RewriteRule (.*) http://www.domena.cz/$1 [R=301,QSA,L]

Děkuji za radu.
Kajman
Profil
Pokud jste tam měl pravidlo s 301, tak i ikdyž ho smažete, prohlížeč si v historii pamatuje, že má na té url přesměrovávat, pokud už jste na tu adresu zkoušel jít.

Zkuste se podívat do nástrojů prohlížeče (typicky F12 + záložka síť), jaký je cyklus adres.

Přesměrování nazpět z https na http může být i jinde než v .htaccess. Zkuste to vše zapoznámkovat a např. v jiném prohlížeči jít na https, zda se stránka snaží přesměrovat na https.
Tomášeek
Profil
Kajman:
No, zkoušel jsem to z prohlížeč,e který nepoužívám a navíc z anonymního okna. Může se to někde pamatovat i tak?

Každopádně, zkusil jsem ještě něco jiného. Vytvořil jsem si testovací složku "test", která obsahuje jen prázdný index.php a .htaccess pouze s pravidly z tohoto tématu. Tedy bez mých vlastních pravidel. Vedle toho existuje v rootu původní .htaccess, který obsahuje jen přesměrování na www.

Pokud přejdu na adresu domena.cz/test, jsem přesměrován na https://www.domena.cz/! Proč nedojde k redirectu jen na https://domena.cz/test? Jsem zmaten, myslel jsem si o sobě, že rozumím tomu, jak tohle funguje, ale asi nerozumím ničemu :-/

domena.cz/test/.htaccess
RewriteEngine on

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

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

domena.cz/.htaccess
RewriteEngine on
 
RewriteCond %{HTTP_HOST} ^domena.cz
RewriteRule (.*) http://www.domena.cz/$1 [R=301,QSA,L]
Kajman
Profil
Pokud je požadavek na doménu druhého řádu (podmínka na řádku 3), přesměruje se na www, ale vždy na protokol https, díky řádku 4.

Přesměrovnání na řádku 7 se pak v tomto kole nekoná, protože řádek 4 má flag L.
Tomášeek
Profil
Kajman:
Pokud odcituji sebe, tak: „Pokud přejdu na adresu domena.cz/test, jsem přesměrován na https://www.domena.cz/!

Pořád nechápu, proč jsem se dostal na https://www.domena.cz, a ne na https://www.domena.cz/test. Jde o to, že se mi při přesměrování zahodil ten adresář "test", ve kterém je navíc i ten .htaccess.

Pokud jsem pochopil zbytek tvého sdělení, tak první podmínka/přesměrování platí pro domena.cz, druhá dvojice pak pro www.domena.cz, je tomu tak? Nevím totiž moc, jak bych to testoval.
Kajman
Profil
Vzhledem k tomu, že ten .htaccess je v adresáři test, bude se testovat regulárem až další cesta za /test/. Zpětná reference $1 bude tedy prázná. Pokud ho opravdu chcete mít v adresáři test, uveďte ho v cíly za %{HTTP_HOST}, případně použijte proměnnou %{REQUEST_URI}.

Navíc, pokud je to na hostingu wedos (dle titulku původního vlákna), tak on má domény řešeny prazváštně a než se požadavek dostane do adresáře test, zpracovává se nejdříve .htaccess, který podstrkává požadavek dle domény do adresáře, ve kterém je teprve test. Na to si také dejte pozor.
Tomášeek
Profil
Kajman:
Díky Kajmane, s tou zpětnou referencí mi to nedošlo. Výborné, už chápu!

U Wedosu to nemám, do tohoto vlákna jsem napsal, protože jsem jej našel a řeším prakticky totéž. Že by měl být rozdíl mezi hostingy (a případně servery) mě ani nenapadlo.

Ještě poslední dotaz ohledně testování, neb nevím, jak to otestovat.
1. Pokud současná přesměrování změním na 302 a všechno ostatní nechám být, nemohu si nějak uškodit?
2. Pokud je odpověď výše "NE", 301 nahradím za 302, za jak dlouho se zapomene, že tam byla 301 a je tam nově 302, s kterou si můžu třeba v nočních hodinách na vybraných podstránkách s minimmálním provozem hrát a zkoušet?

To už by mělo být vše. Moc jsi mi pomohl.
Kajman
Profil
Klidně bych tam třeba na měsíc dal 302 místo 301. Nemělo by to ničemu ublížit.

Pokud se to cyklí a bylo tam nějaké pravidlo, které přesměrovávalo z https na http, tak předešlá 301 může způsobit v kombinaci s nový přesměrováním potíže. V takovém případě bych nějaký ten měsíc nedělal přesměrování mezi protokoly či doménami žádné, tak aby byly dostupné obě varianty. U těch, které nejsou výhledově ty pravé, bych nastavil html nebo http hlavičku canonical s preferovanou adresou.

Jak dlouho si klienti (prohlížeče, proxy, googlebot) pamatuje 301 nevím. 301 tvrdí, že to je již trvalé přesměrování, tak si to teoreticky mohou pamatovat navždy, ale snad si to časem ověřují nebo se jim promaže cache dané stránky (délku by tedy mohla ovlivnit i http hlavička cache-control, která s tím původním přesměrováním byla poslána).
Tomášeek
Profil
Kajman:
U těch, které nejsou výhledově ty pravé, bych nastavil html nebo http hlavičku canonical s preferovanou adresou.
To znamená, že každá HTTP stránka bude mít v hlavičce canonical na HTTPS? Abych to nenastavil obráceně, pro jistotu :-)

Je nějaký rozdíl mezi nastavením na úrovni HTML (meta canonical), nebo na úrovni PHP pomocí header('Link: <<code>https://www.example.com/...>; rel="canonical"');</code>. Přiznám se, že ten PHP zápis se mi zdá být takový divný, leč asi správný, našel jsem jej ve více zdrojích.

Toto už bude úplně vše. Myslím, že i informace v tomto vláknu bude kompletní, a to včetně těchto dodatečných informací pro správnou funkci HTTPS i ve vyhledávači.
Kajman
Profil
Pokud preferuješ https, tak http by mělo mít canonical na https url.

U html to je celkem jedno. Pro ostatní indexovatelné soubory (např. pdf) to jinak než díky
header('Link: <https://www.example.com/...>; rel="canonical"');
nebo blokováním v robots.txt nejde.

Ono také záleží, co je za stránky, pokud jsou tam většinou přihlášení uživatelé, vyplňují formuláře, tak bych přesměrování volil. Pokud to jsou statické stránky, kde je vhodné, aby byl i http přístup pro prastaré neaktualizované telefony, tak bych zvážil zachování na obou protokolech.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0