2012-01-19 13 views
0

好像的.htaccess重写规则:HTTP重定向到https总是(正常工作),但仍需要1个排斥...

RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

完美的作品和重定向所有HTTP请求到https网页。 作为结果,

http://mydomain.com/?p=abc 
http://mydomain.com/?q=de 
http://mydomain.com/?z=123 
http://mydomain.com/ 

访问https://

https://mydomain.com/?p=abc 
https://mydomain.com/?q=de 
https://mydomain.com/?z=123 
https://mydomain.com/ 

分别。如何保持http://mydomain.com/不会重定向到https? 准则:如果没有参数(no?p,no?q,no?z等),则留在http。

谢谢

+0

你的意思是说,你要使用'https'只要有参数传递? – ThinkingMonkey

回答

1

如果你还想留下来的HTTP当查询字符串是空的,使用的解决方案#1以下。

如果您只希望在存在p,q或z参数时保留HTTP,请注释#1解决方案并取消注释#2解决方案。

RewriteCond %{HTTPS} off 
#1 if query string is not empty 
RewriteCond %{QUERY_STRING} !^$ 
#2 only if p or q or z params are not present 
#RewriteCond %{QUERY_STRING} !(^|&)(p|q|z)= [NC] 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
0

使用此代码为您的条件:

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