Převedení webu na HTTPS a chybná přesměrování na Nette 2.4

Perfia
Člen | 8
+
0
-

Ahoj,

snažím se převést web na https na verzi Nette 2.4. Prošel jsem si desítky příspěvků na foru a postupně nastavoval, co je potřeba.
Snaha je taková, že ať někdo zadá domena.cz nebo www.domena.cz, tak ho to vždy skončí na https.
Celý web by měl na https běžet.
Po zadání www.domena.cz by mel skončit na www.domena.cz/cs.

httpd.conf:

<VirtualHost *:80>
    DocumentRoot /var/www/html/domena/www
    ServerName www.domena.cz
    ServerAlias domena.cz

  	<Directory "/var/www/html/domena">
  	    AllowOverride All
  	</Directory>

  	<FilesMatch \.php$>
  		SetHandler application/x-httpd-php
  	</FilesMatch>
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot /var/www/html/domena/www
    ServerName www.domena.cz
    ServerAlias domena.cz
		SSLEngine on
		SSLProtocol all -SSLv3 -SSLv2
		SSLCertificateFile /usr/local/ssl/domena_certificate.crt
		SSLCertificateKeyFile /usr/local/ssl/www.domena.cz.key
		SSLCACertificateFile /usr/local/ssl/domena_intermediate.pem

  	<Directory "/var/www/html/domena">
  	    AllowOverride All
  	</Directory>

  	<FilesMatch \.php$>
  		SetHandler application/x-httpd-php
  	</FilesMatch>
</VirtualHost>

.htaccess ve www:

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

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

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

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

	# front controller
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ 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/x-javascript text/javascript application/javascript application/json
	</IfModule>
</IfModule>

Pokud na začátek index.php vložím tento kód:

$_SERVER['HTTPS'] = (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') ? 'on' : 'off';

snaží se mne to přesměrovat na tuto adresu:
http://www.domena.cz:443/cs
což nemá routu a skončí to na bad request.

Pokud na začátek index.php vložím tento kód:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = '443';
}

začne to přesměrovávat z https na http a zpět a skončí to ve smyčce.

Pokud zadám adresu:
https://www.domena.cz/cs
tak to funguje v pořádku.

Router je definován takto:

$coreRouter[] = new Route('<sLanguage cs>', [
           'presenter' => 'PublicHome',
           'action' => 'default',
       ]);

Bohužel moje znalosti zde končí a nevím, jak z toho ven. Asi mi někde něco uniká, ale nevím kde. Prosím o radu. Předem díky.

CZechBoY
Člen | 3608
+
0
-

Tipuju že tam bude nějaká proxy
https://forum.nette.org/…blem-s-https

Perfia
Člen | 8
+
0
-

CZechBoY napsal(a):

Tipuju že tam bude nějaká proxy
https://forum.nette.org/…blem-s-https

Web běží na samostatném virtuálním serveru od Wedosu, žádný balík, ale postupně instalovaný, CentOS 7, Apache, PHP, Mysql atd. Žádnou proxy jsem neinstaloval.

MajklNajt
Člen | 494
+
0
-

Presmeruj to už v definícii VirtualHostu na porte 80 pomocou
Redirect "/" "https://www.domena.cz/"

Perfia
Člen | 8
+
0
-

MajklNajt napsal(a):

Presmeruj to už v definícii VirtualHostu na porte 80 pomocou
Redirect "/" "https://www.domena.cz/"

Pokud to takto přesměruji na https://www.domena.cz/cs, tak to funguje, ale v momentě, kdy přecházím na nějaký link, který provádí redirect na login obrazovku, tak to opět skončí na http://www.domena.cz:443

MajklNajt
Člen | 494
+
0
-

A vyhodil si všetky ostatné presmerovania z PHP súborov a htaccessu?

CZechBoY
Člen | 3608
+
+1
-

Tak potom nechápu proč v php řešíš nějakou proxy :-)

Perfia
Člen | 8
+
0
-

MajklNajt napsal(a):

A vyhodil si všetky ostatné presmerovania z PHP súborov a htaccessu?

Ano, vyhodil.

@CZechBoY Moc nerozumím dotazu, ale pokud se jedná o ten vložený kód do index.php, tak pokud jsem ho tam nedal, tak to přesměrování na https také končilo ve smyčce zpět na http…

MajklNajt
Člen | 494
+
0
-

V PHP ani v htaccess nerieš nič s protokolom ani portom, všetko nastav iba v apache.conf, mne tak aplikácie bežia bez problémov… Slučky ti môžu vznikať vďaka cache v browseri, skús premázať históriu a cache

Perfia
Člen | 8
+
0
-

MajklNajt napsal(a):

V PHP ani v htaccess nerieš nič s protokolom ani portom, všetko nastav iba v apache.conf, mne tak aplikácie bežia bez problémov… Slučky ti môžu vznikať vďaka cache v browseri, skús premázať históriu a cache

Zrušil jsem úpravy portů v index.php a končí to ve smyčce mezi http a https…
Je jedno, jestli použiji v conf redirect nebo RewriteRule.
Prostě mění https://www.domena.cz/cs na http://www.domena.cz/cs a zpět…
Může to způsobovat chybné nastavení routy? Musím tam uvádět protokol? Podle dokumentace myslím, že ne.

MajklNajt
Člen | 494
+
0
-

skús ešte routu zapísať natvrdo s protokolom:

$coreRouter[] = new Route('https://www.domena.cz/<sLanguage cs>', [
	'presenter' => 'PublicHome',
	'action' => 'default',
]);

no aj tak si myslím, že to bude v cache prehliadača, keď som niektoré weby preklápal z http na https, browser si „pamätal“ niektoré redirecty apacha a podstrkoval tie…

Perfia
Člen | 8
+
0
-

MajklNajt napsal(a):

skús ešte routu zapísať natvrdo s protokolom:

$coreRouter[] = new Route('https://www.domena.cz/<sLanguage cs>', [
	'presenter' => 'PublicHome',
	'action' => 'default',
]);

no aj tak si myslím, že to bude v cache prehliadača, keď som niektoré weby preklápal z http na https, browser si „pamätal“ niektoré redirecty apacha a podstrkoval tie…

To přesměrovává také. Kde všude lze odmazat tu cache prohlížeče? Zkouším to na Chrome, ale dělá mi to i z jiných…V Chrome to mažu na záložce Application volbou Clear site data.

MajklNajt
Člen | 494
+
0
-

skús v Chrome ísť cez inkognito, vtedy si načíta čerstvé dáta.. a nemáš naozaj v config.neon nastavené proxy?

Perfia
Člen | 8
+
0
-

MajklNajt napsal(a):

skús v Chrome ísť cez inkognito, vtedy si načíta čerstvé dáta.. a nemáš naozaj v config.neon nastavené proxy?

Nepomáhá a proxy nemám.
Začal jsem experimentovat a odmazávat kod a vypadá to, že problém mi nastal v momentě, kdy jsem přidal rozšíření Kdyby/console. Bez něj to vypadá, že to funguje. Zkusím to znovu celé postavit a ověřit. Zatím díky za rady.

Perfia
Člen | 8
+
0
-

Všem se omlouvám za zdržení, před rokem jsem začal s Nette a rok žiji s tím, že jsem si stáhl Nette 2.4 a vše tomu přizpůsobuji. Nyní jsem zjistil, že jedu na 2.3, takže flag SECURED v routě vše řeší a funguje, jak má. Třeba můj omyl někomu pomůže…:-)