Nginx https重定向 - 停止进一步的规则处理

时间:2013-08-02 14:45:23

标签: https nginx rewrite

我正在尝试将旧网站的http和https重定向配置为新网站。

根据重写指令docs:

  

如果替换字符串以http://开头,那么客户端将会   被重定向,并且任何进一步的重写指令都被终止。

我试图通过https实现同样的效果,但无济于事。 这是我的服务器配置:

listen 80;
listen 443 ssl;
server_name mydomain.com

rewrite ^/path/resource(.*)$ $scheme://newdomain.com/newpath/resource$1 permanent;
...
return 301 http://newdomain.com/newpath/;

使用http我得到我正在寻找的东西:如果我访问 mydomain.com/path/resource 我被重定向到 newdomain.com/newpath/resource

然而,与https相同,我将我重定向到http://newdomain.com/newpath/

上使用了rewrite_log,在这两种情况下,重写规则都匹配,但https协议不会停止进一步的规则处理。

我感觉我要么缺少一些非常明显的东西,要么我没有正确地解决这个问题。如果有效的话,我不介意以任何不同的方式做这件事。

有没有人知道如何使用https实现http重定向?

1 个答案:

答案 0 :(得分:0)

我通常希望使用return代替rewrite进行重定向,尝试将路径与位置块匹配

location ~ /path/resource(.*) {
    return 301 $scheme://newdomain.com/newpath/resource$1;
}

我认为这种方式你肯定知道不会有进一步的处理,因为它只有1行,试一试并告诉我它是怎么回事。

PS:这将保留请求的$scheme,对http://的请求将重定向到http://https://将重定向到https://