我这里有一个网站及其WordPress博客的小问题。
在短时间内,我们使用https设置了所有内容,直到遇到一些问题并且不得不返回HTTP。
那时候,我收集了一些.htaccess
个文件来处理这些问题,但我从来没有真正尝试过我的非www到www - ssl"
目的是添加www并将https重定向到http
RewriteCond %{HTTPS} on
RewriteRule ^/?$ http://%{SERVER_NAME}/ [R=301,L]
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
看起来很简单,我认为它应该有效。
我有两个.htaccess
个文件,一个用于http://www.example.com/
,另一个用于http://www.example.com/blog
,两个文件具有相同的内容,因为用户主要来自SE的博客。
问题是:如果我加载https://www.example.com/blog
,我会被重定向到http://www.example.com/
而不是http://www.example.com/blog
。
在撰写问题时我认为我尝试了这个问题,我有想法添加这个
RewriteCond %{HTTPS} on
RewriteRule ^/?$ http://%{SERVER_NAME}/{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
然后我只被重定向到http://www.example.com/{REQUEST_URI}
有人可以告诉我如何保留重定向查询的路径吗?
答案 0 :(得分:0)
RewriteCond %{HTTPS} on RewriteRule ^/?$ http://%{SERVER_NAME}/{REQUEST_URI} [R=301,L]
如果你注意到你的另一个指令中有%{REQUEST_URI}
。您错过了上面的%
前缀。这是获取REQUEST_URI
服务器变量值的必需语法。但另请注意,REQUEST_URI
的值已包含斜杠前缀,因此应从替换中省略斜杠。即。而不是/{REQUEST_URI}
,它应该是%{REQUEST_URI}
。
另请注意,RewriteRule
模式(^/?$
)仅匹配您网站的根目录(如果此/blog
文件,则匹配.htaccess
子目录在那个子目录中)。您需要匹配所有内容。所以,像这样修改上面的RewriteRule
:
RewriteRule ^ http://www.example.com%{REQUEST_URI} [R=301,L]
我还对域名进行了硬编码,否则,在请求非规范(即非www)主机时,您最终会获得双重重定向。