Как гарантировать, что Apache всегда обслуживает одну страницу через HTTPS?
-
21-09-2019 - |
Вопрос
Я хотел бы перенаправить все соединения с htt_p://www.example.com/abc.html на HTTP_S://www.example.com/abc.html .Какие команды mod_alias или mod_rewrite будут работать для этого?Я пытался:
RewriteEngine on
RewriteCond %{HTTPS} =off
RewriteRule $abc\.html^ https://www.example.com/abc.html [R]
как в .htaccess, так и в httpd.conf, но это не работает.Это работает, если первой строкой в RewriteRule является что-либо другое (например abz.html), но не если это abc.html.abc.html это реальный файл на сервере (а не другой редирект).Options FollowSymLinks присутствует в соответствующей директиве Directory.
Большое спасибо.
Решение
Что-то вроде следующего позволит вам перенаправлять страницы, отличные от SSL, на версии SSL (при условии, что вы используете SSL на порту 443):
RewriteEngine on
# Limited redirects
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} ^/abc\.html$ [OR,NC]
RewriteCond %{REQUEST_URI} ^/def\.html$ [OR,NC]
RewriteCond %{REQUEST_URI} ^/ghi\.html$ [NC]
RewriteRule ^/(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Флаг [OR] после RewriteCond буквально означает "или", вот почему в последнем условии его нет