Я хотел бы перенаправить HTTPS на HTTP только в том случае, если отсутствуют следующие параметры запроса:
https://www.example.com/index.php?p=login
https://www.example.com/index.php?p=signup
https://www.example.com/index.php?p=cart
https://www.example.com/index.php?p=one_page_checkout
То есть любой запрос, отличный от этого, должен перенаправляться с HTTPS на HTTP. Я хочу убедиться, что только мой путь проверки – это HTTP.
Можно ли это сделать, просто используя .htaccess
с RewriteCond
и RewriteRule
?
Добавьте это в файл htaccess в свой корень документа, предпочтительно выше любых правил, которые могут быть уже существуют:
RewriteEngine On RewriteCond %{QUERY_STRING} !(^|&)p=(login|signup|cart|one_page_checkout)(&|$) RewriteCond %{HTTPS} on RewriteRule ^index\.php$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R] RewriteCond %{QUERY_STRING} (^|&)p=(login|signup|cart|one_page_checkout)(&|$) RewriteCond %{HTTPS} off RewriteRule ^index\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R]
Чтобы сделать это постоянным перенаправлением, добавьте a =301
после R
в квадратных скобках.
Включите mod_rewrite и .htaccess через httpd.conf
а затем поместите этот код в свой .htaccess
в каталоге DOCUMENT_ROOT
:
Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEngine On RewriteBase / RewriteCond %{HTTPS} on RewriteCond %{QUERY_STRING} !(^|&)p=(login|signup|cart|one_page_checkout)(&|$) [NC] RewriteRule ^(index\.php)?$ http://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]
Просто поместите ниже строки в ваш файл .htaccess: –
RewriteCond %{HTTPS} !=on RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]