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

Как сделать так, чтобы htaccess не перенаправлялся на http при отправке формы

Часть моего файла .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, согласно руководство.