我有一个关于.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
等)
我现在有点不知所措,所以我觉得是时候向全世界求助了。
答案 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]