将所有内容从http重定向到https,联系页

时间:2016-07-06 09:01:37

标签: apache .htaccess redirect

如何将网站上的所有网页从https重定向到http,除了我一直希望重定向到https域的/ contact页面?

我可以将所有内容从http重定向到https,如下所示:

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

但是,我在添加联系页面的例外时遇到问题,我希望始终从http重定向到https

更新

我按照建议添加了规则,但/ contact现在重定向到/index.php?q=contact。

我正在使用具有以下规则的ModX:

# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

为什么这与重新定向/联系(http)到/ contact(https)的新规则相冲突?

谢谢:)

3 个答案:

答案 0 :(得分:1)

使用此:

RewriteEngine On

RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} !^\/contact\/
RewriteRule (.*) https://%{HTTP_HOST}/$1 [L,R=301]    

RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} \/contact\/ 
RewriteRule (.*) http://%{HTTP_HOST}/$1 [L,R=301]

答案 1 :(得分:0)

试试这个: -

RewriteEngine On
RewriteBase /

//Turn https on for /page/contact
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/page/contact
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

//Turn https off everthing but /page/contact
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/page/contact
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

第一个规则集将确保页面/页面/联系人通过https访问时会重定向回http。第二个规则集将所有页面重定向到https访问的http,除了/ page / contact。

答案 2 :(得分:0)

您可以尝试以下规则:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/contact$
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^contact$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

您可以使用this online tool测试.htaccess文件(请注意,它不包含所有Apache功能,结果可能与您的生产服务器略有不同,但适用于简单规则)。