Я использую следующий скрипт для перенаправления всех запросов, отправляемых с 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 будет обслуживаться безопасно.