在保持路径的同时https到http

时间:2017-10-02 00:50:34

标签: .htaccess redirect

我这里有一个网站及其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}

有人可以告诉我如何保留重定向查询的路径吗?

1 个答案:

答案 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)主机时,您最终会获得双重重定向。