Часть моего файла .htaccess заставляет https
на определенных страницах (например, когда пользователь входит в систему, вводит данные кредитной карты и т. д.) при принудительном http
на всех остальных страницах. Кажется, это идеальная установка для того, что мне нужно.
Однако одно из расширений моего сайта отвечает за создание формы обработки кредитной карты. В URL-адресе действия формы есть https
URL-адрес корневого веб-сайта в нем (например, https://domain.com/). Однако корневой веб-сайт не является одной из тех страниц, которые .htaccess заставляет https
включен, поэтому перенаправление на http
. Из-за этого расширение не работает, потому что форма пытается отправить https
что перенаправляет на http
.
Что я должен делать? Я не хочу, чтобы пользователей заставляли просматривать защищенную страницу, когда им это не нужно; Я бы предпочел, чтобы они воспользовались преимуществами кеширования. И, очевидно, на защищенных страницах они должны отправляться по защищенным URL-адресам (CMS моего сайта, по-видимому, работает таким образом, что все отправления форм в корневой веб-сайт работают нормально). Я не могу указать расширению отправлять по другому URL.
Вот соответствующая часть моего .htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
# Define default protocol for all assets
RewriteRule ^ - [E=protocol:http,E=ssl:%{HTTPS}off]
# Define HTTPS targets, add more cond as required
RewriteCond $1 (payment|sign-in|sign-up) [NC]
RewriteRule (.*) - [E=protocol:https,E=ssl:%{HTTPS}on]
# Rewrite host if necessary and redirect on correct protocol
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ %{ENV:protocol}://%1%{REQUEST_URI} [L,R=301]
# Protocol switch if necessary (host is already correct)
RewriteCond %{ENV:ssl} ^(onoff|offon)
RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|png|css|js)$ [NC]
RewriteRule ^ %{ENV:protocol}://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Finally, process the internal redirect
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
Может быть, это можно изменить, чтобы "не перенаправлять, если это отправка формы?"
На мой взгляд, вы оптимизируете неправильную вещь, строго заставляя определенные страницы использовать HTTPS, а другие использовать простой HTTP. Просто перенаправьте все на HTTPS и покончите с этим.
В вычислительная стоимость HTTPS в большинстве случаев незначительна.
Ваша озабоченность по поводу кеширования браузера с SSL кажется необоснованным также.
И моя любимая мозоль: вам лучше включить свою конфигурацию в основной httpd.conf вместо того, чтобы полагаться на файлы .htaccess, согласно руководство.