Autor Zpráva
Hitman
Profil
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
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
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
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
Aha, díky za vysvětlení :-)

Uvedený kód funguje přesně jak má - díky!

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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