У меня есть включаемый файл, скажем так inc-navigation.html
, имеющий абсолютные пути (http://www.pathtoimage.com/image.com
) которые есть на КАЖДОЙ СТРАНИЦЕ. Что ж, используя SSL, я не могу использовать тот же включаемый файл, потому что он не ссылается на https://
Вот это боль!
Итак, я, возможно, думал об использовании htaccess для перезаписи URL-адресов всех ссылок HTTP на HTTPS, когда браузер запрашивает страницу https. Опять же, для ясности, я не хочу «перенаправлять», просто «заменять».
Итак, у меня есть это:
RewriteCond %{HTTPS} !=on
RewriteRule ^http$ https
Но похоже, что это не работает. Возможно ли такое вообще?
Вы не можете этого сделать, потому что вам нужно, чтобы веб-браузер посетителя понимал, что он должен использовать безопасное (https) соединение для получения этих элементов, а это невозможно, если вы скрываете новое местоположение от посетителя (что вы и делаете. при использовании RewriteRule без перенаправления).
Я думаю, что лучше всего изменить включаемый файл, чтобы использовать абсолютные пути, которые не указывают домен или протокол. Другими словами, при изменении включаемого файла:
http://www.domainname.com/path/to/image/image.png
к
/path/to/image/image.png
везде встречается такая картина.
HTTPS - это HTTP через SSL / TLS, который защищает транспортный уровень, то есть связь между браузером и веб-сервером.
mod_rewrite
перезаписывает запросы внутри или снаружи через перенаправления, но только после того, как запрос был отправлен браузером, что в вашем случае слишком поздно.
Если вы хотите использовать свой контент, обычно размещенный на обычном HTTP через соединение HTTPS, вы можете настроить обратный прокси-сервер с хоста HTTPS на простой хост HTTP. mod_proxy_http
, который по умолчанию входит в состав Apache 2.x, сможет переписать Location
заголовки в редиректе, но не содержимое самих страниц (и их ссылки). Для этого вам, возможно, придется посмотреть mod_proxy_html
, который должен иметь возможность переписывать ссылки на самих страницах.
При этом, имея абсолютные ссылки в вашем inc-navigation.html
файл звучит как ошибка дизайна, может быть проще выполнить поиск / замену, чтобы избавиться от этих абсолютных ссылок в этом файле, чем настраивать mod_proxy_html
.
Если некоторые из используемых вами абсолютных ссылок указывают на другие хосты, вы можете использовать относительные ссылки сетевого пути (начиная с //
, делая схему относительной). Конечно, это будет работать, только если эти хосты поддерживают HTTPS.
У вас немного неправильный синтаксис, вот что вам нужно
RewriteCond %{HTTPS} !on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]