Převedení webu na HTTPS a chybná přesměrování na Nette 2.4
- Perfia
- Člen | 8
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.
- Perfia
- Člen | 8
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.
- Perfia
- Člen | 8
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…
- Perfia
- Člen | 8
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…
- Perfia
- Člen | 8
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
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
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.
- Perfia
- Člen | 8
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.