notatnik.net.pl

Przekierowanie na https i no-www w htaccess

Niedziela, 23.04.2017

W ostatnim czasie najpopularniejsze przeglądarki, m.in chrome, zaczęły informować użytkowników, w sposób bardziej widoczny, o braku zabezpieczeń. Jeśli na naszej stronie nie korzystamy jeszcze z protokołu SSL, a dodatkowo wykorzystujemy dane przesyłane przez użytkownika, np. w postaci formularzy logowania, wówczas, po wejściu na stronę otrzymujemy ostrzeżenie, że strona jest niezabezpieczona.

Jedynym wyjściem w tej sytuacji jest zainstalowanie certyfikatu potwierdzającego tożsamość witryny. Jeżeli to zrobimy, musimy ustawić również przekierowania z dotychczasowego adresu http:// na nowy, bezpieczny - https:// Najlepiej zrobić to za pomocą pliku .htaccess. Aby przekierować użytkownika na adres z https, wystarczy poniższy kod: RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} !=localhost
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
W podanym kodzie, linia 1 odpowiada za sprawdzenie, czy korzystamy z portu 80 - jest to domyślny port dla protokołu HTTP. W liniach 2-3 dodane jest dodatkowe sprawdzenie, czy HTTP_HOST jest różny od localhost, oraz czy adres nie zawiera w sobie 127.0.0.1. Dzięki temu można uruchomić tę samą wersję strony na lokalnym serwerze bez potrzeby instalowania na nim certyfikatu. Linie 4-3 wykonują przekierowanie na stronę o podanym adresie, ale z wykorzystaniem protokołu HTTPS. Jeżeli korzystamy również z adresu nie zawierającego w sobie www wówczas musimy jeszcze ustawić przekierowanie w postaci jak poniżej: RewriteCond %{SERVER_PORT} 443
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
W tym przypadku sprawdzamy, czy korzystamy z portu 443, który jest domyślny dla protokołu HTTPS, jeśli tak, to wykonujemy przekierowanie na wersję bez www. Należy pamiętać, że ten kod powinien być dodany po tym, który przekierowuje nas na wersję HTTPS.

Zobacz też:

Jak zablokować dostęp do katalogu .git i pliku .gitignore w htaccess?Jak ukryć listowanie plików na serwerze za pomocą htaccess?Czym się różni przekierowanie 301 od 302?Jak zrobić przekierowanie z adresu www na bez www za pomocą htaccess?