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

Добавление исключения для перенаправления https (mod_rewrite)

Я использую следующий скрипт для перенаправления всех запросов, отправляемых с HTTP, на HTTPS.

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Мне нужно добавить исключение к этому правилу (для конкретной страницы) по той причине, что оно загружает JS, который находится на сервере, на котором нет HTTPS. В FF, Chrome работает. В IE отображается неприятное предупреждение.

Есть идеи, как добавить правило к моему существующему коду mod_rewrite?

Вы можете добавить второй RewriteCond с отрицательным тестом (префикс образца с !). Он будет добавлен к существующему RewriteCond.

Редактировать:

Пример:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI}  !^/pageregex
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

куда pageregex регулярное выражение, описывающее страницу, для которой вы хотите сделать исключение. Обратите внимание, что регулярное выражение может быть просто фиксированной строкой, которая однозначно идентифицирует конкретную страницу.

Если у вас установлен и правильно настроен mod_proxy, вы также можете обслуживать этот файл .js через https.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI}  !^/pageregex
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}    [C]
RewriteRule ^/home/to/js/file.js   http://example.com/home/to/js/file.js  [P]

Флаг [C] позволяет выполнять следующее правило, как если бы оно было частью первого правила перезаписи. Флаг [P] указывает mod_rewrite использовать mod_proxy для получения указанного файла .js и его прозрачного обслуживания. Это, вероятно, заставит IE перестать лаять о «безопасном и небезопасном содержимом на одной странице, вы хотите продолжить?» поскольку файл .js будет обслуживаться безопасно.