Назад | Перейти на главную страницу

использование modrewrite для изменения http на https (без перенаправления)

У меня есть включаемый файл, скажем так 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]