Autor | Zpráva | ||
---|---|---|---|
Hitman Profil |
#1 · Zasláno: 16. 9. 2017, 08:59:49
Vážení diskutující,
už asi hodinu se snažím vyřešit problém s htaccess. Mám tento kód: DirectoryIndex index.php RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/index.php RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC] RewriteRule (.*) index.php RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] A potřebuji přejít na HTTPS s tím že mojedomena.cz/neco = mojedomena.cz/neco Přidáním: DirectoryIndex index.php RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/index.php RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC] RewriteRule (.*) index.php RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] jsem dosáhnul toho že se mi vše přesměruje na index.php, čemuž nerozumím. "{REQUEST_URI}" by přece mělo podat stejnou adresu a ne vrátit index, ne? Našel jsem ještě tento kód: RewriteCond %{ENV:HTTPS} !^.*on RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] Ale ten mi vypíše chybu ve smyčce... Díky |
||
Keeehi Profil |
#2 · Zasláno: 16. 9. 2017, 09:22:26
Možná takto
DirectoryIndex index.php RewriteEngine On RewriteBase / RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/index.php RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC] RewriteRule ^ index.php RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] |
||
Hitman Profil |
Super, http -> https funguje správně. Jen verze s WWW by se měla přesměrovat na čisté https. Teď se sice http:// www přesměruje na https:// www, ale z toho už na https:// ne. Píše mi to:
Smyčka při přesměrování Server přesměrovává požadavky na tuto adresu sám na sebe, a to takovým způsobem, který zabraňuje jejich dokončení. |
||
Keeehi Profil |
#4 · Zasláno: 16. 9. 2017, 13:41:05
Hitman:
V htaccess není nic o přesměrovávání z verze bez www na verzi s. Takže to přesměrovává něco jiného. Napadají mě dvě možnosti. 1. Dříve takové přesměrování existovalo (i třeba omylem při úpravě) a bylo s R=301. Taková přesměrování si prohlížeč pamatuje a rovnou přesměrováván aniž by se serveru znovu ptal. Proto ani nemůže zjistit, že už takové přesměrování neexistuje. Proto je potřeba vždy testovat přesměrování s kódem 302. Taková si prohlížeč neukládá. Až potom, kdy si je člověk absolutně jistý, že to má správně je možné je změnit na 301. 2. Přesměrovává samotná aplikace. |
||
Hitman Profil |
Když dám do htaccess svůj původní kód (ten úplně nahoře) a zadám www. mujweb.cz/nejaka-podstranka tak mě to hodí na http:// mujweb.cz/nejaka-podstranka.
Když tam zadám můj druhý kód s pokusem o htaccess tak mě stejný postup dostane na https:// mujweb.cz/index.php Myslel jsem že www -> https zajišťuje: RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] Je to možné nějak ošetřit aby https:// www. -> https:// a http:// www. -> https:// ? Respektive by asi stačilo https:// www. -> https://, protože na https se to přesměrovává... Díky |
||
Kajman Profil |
#6 · Zasláno: 18. 9. 2017, 09:22:22
Hitman:
Nezajistí. Odeberete www ale zachováte http. Díky flagu L se skončí a jde to prohlížeči. Ten udělá nový požadavek na kombinaci http a verze bez www. Pak začne úřadovat pravidlo s přidáním https, ale protože u něho chybí flag L, pokračuje se dalšími pravidly a url se přepíše na index.php - tyto dvě změny se postupně zkombinují a výsledkem je https bez www, ale s index.php v cestě. Zkuste RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=302,L,NE] RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE] #ostatni pravidla |
||
Hitman Profil |
#7 · Zasláno: 18. 9. 2017, 09:50:13
Aha, díky za vysvětlení :-)
Uvedený kód funguje přesně jak má - díky! |
||
Časová prodleva: 2 měsíce
|
|||
myBN Profil |
#8 · Zasláno: 27. 11. 2017, 21:02:03
Kajman:
Ahoj, můžu mít prosím tě dotaz, použil jsem přesměrování co jsi napsal, ale stránka mi nenaběhne, ukazuje mi to chybovou hlášku v prohlížeči ERR_TOO_MANY_REDIRECTS. Nemáš tip co s tím? Dík |
||
Kajman Profil |
#9 · Zasláno: 27. 11. 2017, 22:51:20
Cyklí se to, bude tam někde ještě další přesměrování (třeba jen zapamatované v historii prohlížeče). Podívejte se např. do konzole prohlížeče, odkud kam se to přesměrovává.
|
||
Časová prodleva: 1 měsíc
|
|||
pajadvorak Profil |
#10 · Zasláno: 1. 1. 2018, 09:12:35
Ahoj,
už několik dní si lámu hlavu jak správně nastavit htaccess, aby fungovalo přesměrování na https a vše bez www, protože se jedná o subdoménu 3.řádu. Ví si s tím prosím někdo rady? Děkuji. Zde je původní funkční kód: RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$ RewriteRule ^(.+[^/])$ /$1/ [L,R=301] RewriteRule ^(.*)/$ /index.php?sekce=$1 [L,nc,QSA] |
||
Časová prodleva: 6 let
|
0