Přesměrování na HTTPS z HTTP

MajBoss
Člen | 16
+
0
-

Zdravím, mám problém při přesměrování z HTTP na HTTPS.

V .htaccess mám toto:

Require all granted

# disable directory listing
<IfModule mod_autoindex.c>
	Options -Indexes
</IfModule>

# enable cool URL
<IfModule mod_rewrite.c>
	RewriteEngine On
	# RewriteBase /

	# use HTTPS
	RewriteCond %{HTTPS} off
 	RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

	# prevents files starting with dot to be viewed by browser
	RewriteCond %{REQUEST_FILENAME} -f
	RewriteRule /\.|^\.(?!well-known/) - [F]

	# front controller
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule !\.(pdf|js|mjs|ico|gif|jpg|jpeg|png|webp|svg|css|rar|zip|7z|tar\.gz|map|eot|ttf|otf|woff|woff2)$ index.php [L]
</IfModule>

# enable gzip compression
<IfModule mod_deflate.c>
	<IfModule mod_filter.c>
		AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json application/xml image/svg+xml
	</IfModule>
</IfModule>

Pokud však ty dva řádky pod #use HTTPS nechám odkomentované, na web se mi nejde dostat a hází to hlášku: Tato stránka nefunguje. Web www.example.com vás přesměroval příliš mnohokrát.
Mám podezření, že cosi v Nette mě tedy směruje zpět na HTTP a pak se to zacyklí.

Musím někde v Nette ten zabezpečený protokol nějak zapnout anebo nastavit nějakou routování? Nebo v čem je problém?

Zdeno1981
Člen | 115
+
0
-

Ahoj @MajBoss

V Nette určitě problém nebude, zkus použit originální htaccess https://github.com/…ww/.htaccess

Sám ho použivám a stačilo odkomentovat pouze tyto řádky:

	# RewriteCond %{HTTPS} !on
	# RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Editoval Zdeno1981 (28. 7. 2022 8:47)

MajBoss
Člen | 16
+
0
-

Zdeno1981 napsal(a):

Ahoj @MajBoss

V Nette určitě problém nebude, zkus použit originální htaccess https://github.com/…ww/.htaccess

Sám ho použivám a stačilo odkomentovat pouze tyto řádky:

	# RewriteCond %{HTTPS} !on
	# RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Ahoj, bohužel stále ten stejný problém.

Koukal jsem do konzole a web mě pořád dokola přesměrovává na stejnou adresu s https. Po dvacátý už to prohlížeč zastaví.

Kamil Valenta
Člen | 820
+
0
-

Dej si do doc rootu třeba nějaký test.php (klidně i prázdný), který nebude startovat Nette. A zkus jej otevřít, pokud to bude OK, hledej v routě, jestli není fixně na http. Pokud se to i tam bude cyklit, hledej v Apache (conf, nadřazený htaccess, logy…)

Domm
Člen | 4
+
0
-

Pokud je nette schované za reverse proxy tak se přesně toto dít může – htaccess tě někam nasměruje, ale nette tě hodí zpět protože neví o tom že je za proxy.

Je potřeba v konfiguraci nette nastavit proxy něco takového:

http:
	proxy:
		 - ip_proxy/maska

Pak by redirecty nette měli být již v pořádku.

MajBoss
Člen | 16
+
0
-

Kamil Valenta napsal(a):

Dej si do doc rootu třeba nějaký test.php (klidně i prázdný), který nebude startovat Nette. A zkus jej otevřít, pokud to bude OK, hledej v routě, jestli není fixně na http. Pokud se to i tam bude cyklit, hledej v Apache (conf, nadřazený htaccess, logy…)

Dobrý nápad, vyzkoušel jsem to a nefunguje ani ten test.php a bez přesměrování na HTTPS normálně funguje, takže chyba v Nette nebude. Akorát nevím, co přesně mám dělat, protože do nastavení serveru moc hrabat nemohu (mám klasickej webhosting) a žádný nadřezený .htaccess v rootu nemám. Prošel jsem taktéž logy webhostingu a nic tam o tom není.

Nevíte co s tím?

MajBoss
Člen | 16
+
0
-

Domm napsal(a):

Pokud je nette schované za reverse proxy tak se přesně toto dít může – htaccess tě někam nasměruje, ale nette tě hodí zpět protože neví o tom že je za proxy.

Je potřeba v konfiguraci nette nastavit proxy něco takového:

http:
	proxy:
		 - ip_proxy/maska

Pak by redirecty nette měli být již v pořádku.

To asi problém nevyřeší, neboť problém při přesměrování na HTTPS i je mimo Nette. Zřejmě bude chyba na straně serveru, takže zkusím podporu. Každopádně možná by to vyřešilo jiný problém, protože vždy, když mě Nette někam přesměrovává v metodě (linky fungují), tak mě přesměruje na https://example.com:80 – z nějakého důvodu k tomu hodí port 80 a to na https logicky spadne, může to být taky tou proxi?

nightfish
Člen | 518
+
0
-

MajBoss napsal(a):
To asi problém nevyřeší, neboť problém při přesměrování na HTTPS i je mimo Nette. Zřejmě bude chyba na straně serveru, takže zkusím podporu. Každopádně možná by to vyřešilo jiný problém, protože vždy, když mě Nette někam přesměrovává v metodě (linky fungují), tak mě přesměruje na https://example.com:80 – z nějakého důvodu k tomu hodí port 80 a to na https logicky spadne, může to být taky tou proxi?

Vypadá to, že k SSL terminaci dochází na proxy serveru a na Apache se dostane request už jenom přes HTTP (port 80). V takovém případě ti nastavení proxy v Nette zajistí správné generování URL s HTTPS.

Co se týká přesměrování HTTP na HTTPS, zkus svůj přesměrovávací kód v .htaccessu změnit na:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Editoval nightfish (28. 7. 2022 16:20)