如果通过htaccess缺少querystring参数,则将HTTPS重定向到HTTP

时间:2013-09-17 16:06:31

标签: php apache .htaccess redirect mod-rewrite

如果以下查询字符串参数不存在,我想将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。

这可以通过.htaccessRewriteCond使用RewriteRule来完成吗?

3 个答案:

答案 0 :(得分:2)

将此添加到文档根目录中的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]

要将此设为永久重定向,请在方括号中的=301后添加R

答案 1 :(得分:0)

通过httpd.conf启用mod_rewrite和.htaccess,然后将此代码放在.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]

答案 2 :(得分:0)

将以下行添加到.htaccess文件中: -

RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]