htaccess HTTPS和HTTP查询字符串重定向

时间:2016-02-18 16:39:33

标签: apache .htaccess redirect mod-rewrite

我有一个关于.htaccess的问题并重定向某些内容。

我目前有一个需要全站点HTTPS的网站。这是通过.htaccess文件完成的。

我要求HTTP上有两件事:/sage//index.php?route=ebay/openbay

我目前为sage准备了以下内容,它确实有效。没有循环,重定向工作正常。

RewriteCond %{HTTP_HOST} ^(www\.)?site\.co\.uk$ [NC]
##check if https
RewriteCond %{HTTPS} on
## if so, redirect to http
RewriteRule ^/?(sage) http://www.site.co.uk%{REQUEST_URI} [L,R]
## happy days! it works!

RewriteCond %{HTTP_HOST} ^(www\.)?site\.co.uk$ [NC]
##lets check again but this time for any remaining http
RewriteCond %{HTTPS} off
##if so redirect it back to https, unless sage is at the start.
RewriteRule !^/?(sage) https://www.site.co.uk%{REQUEST_URI} [L,R]
##great, still ahve sitewide https except on sage, mission accomplished.

现在,我遇到了查询字符串行的问题。

这就是我所拥有的,它被置于htaccess中的上述代码之下。

RewriteCond %{QUERY_STRING} route=ebay/openbay/ [NC]
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}/$1 [L,R]

RewriteCond %{QUERY_STRING} !route=ebay/openbay/
RewriteCond %{HTTPS} off
RewriteRule (.*) http://%{HTTP_HOST}/$1 [L,R,NC,QSA]  

这不仅有效,而且还为此创建了一个重定向循环。我不确定为什么,我有点卡住了。

我最初从一篇旧帖子中获取了这个想法:Redirect some url to https in .htaccess,希望我能在括号中添加两个字符串(sage/index.php等)

我现在有点不知所措,所以我觉得是时候向全世界求助了。

1 个答案:

答案 0 :(得分:2)

你可以尝试这个,看看它是否为你避免了循环:

RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} !^/sage/? [NC]
RewriteCond %{QUERY_STRING} !route=ebay/openbay/ [NC]
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/sage/? [NC,OR]
RewriteCond %{QUERY_STRING} route=ebay/openbay/ [NC]
RewriteRule ^(.*) http://%{HTTP_HOST}%{REQUEST_URI} [R,L]