htaccess仅针对某些页面重定向到ssl,而对于其他页面则不安全

时间:2012-09-04 09:45:41

标签: .htaccess mod-rewrite redirect ssl

我需要将所有请求重定向到www并且只将某些页面重定向到没有www的https,因为由于某种原因,我们客户购买的ssl证书不包括www。 环顾四周后,我成功完成了大部分工作。但是,一旦我们访问了一个安全的URL页面,其他页面将保留在https上。 这是我到目前为止在.htaccess中的内容:

#Redirect to www
RewriteCond %{HTTPS} =off
RewriteCond %{HTTP_HOST} ^[^./]+\.[^./]+$ [NC,OR]
RewriteCond %{HTTP_HOST} ^([^./]+)\.[^./]+\.[^./]+$ [NC]
RewriteCond %1 !=www [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


# Force SSL on checkout login account and admin pages
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} checkout|login|my-account|administrator|webshop
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L

如果https已启用且不属于列出的网址,我会错过将重定向到www非安全的部分。但我对正则表达式和重写规则并不熟悉。 一些帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

请尝试使用此代码:

# Force SSL on checkout login account and admin pages
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} checkout|login|my-account|administrator|webshop
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$ [NC]
RewriteRule ^(.*)$ https://%2/$1 [R=301,L,QSA]

# Remove SSL on other pages
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !checkout|login|my-account|administrator|webshop
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%2/$1 [R=301,L,QSA]

# Force www for non https
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L,QSA]