Mając zainstalowany na serwerze www moduł mod_rewrite
, można w prosty sposób wymusić przekierowanie z protokołu http na szyfrowane połączenie https.
W tym celu należy w pliku .htaccess dodać poniższy kod:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI}
Zmienna HTTPS powinna przyjmować wartość on gdy połączenie jest szyfrowane i off gdy nie jest. Czasami na niektórych serwerach zmienna ta nie jest w ogóle zdefiniowana. W takim przypadku można skorzystać z tego, że standardowo https jest obsługiwany przez serwer na porcie 443. Jeśli połączanie przychodzi na inny port (standardowo 80) wtedy jest to pewnie nieszyfrowany http.
Czyli zamiast odwoływać się do zmiennej HTTPS sprawdzamy wartość zmiennej SERVER_PORT i używamy
RewriteCond %{SERVER_PORT} !443
Oczywiście można zrobić przekierowanie na https tylko dla wybranego pliku lub katalogu.
RewriteEngine On RewriteCond %{REQUEST_URI} ^\/plik.html$ [OR] RewriteCond %{REQUEST_URI} ^\/katalog RewriteCond %{SERVER_PORT} !443 RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]