【问题标题】:Nginx https redirects - stop further rules processingNginx https 重定向 - 停止进一步的规则处理
【发布时间】:2013-08-02 14:45:22
【问题描述】:

我正在尝试配置从旧站点到新站点的 http 和 https 重定向。

根据重写指令文档:

如果替换字符串以 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 on,在这两种情况下,重写规则都匹配,但 https 协议不会停止进一步的规则处理。

我觉得要么我遗漏了一些非常明显的东西,要么我没有正确解决这个问题。如果可行,我完全不介意以任何不同的方式执行此操作。

你们中有人知道如何使用 https 实现 http 重定向吗?

【问题讨论】:

    标签: https nginx rewrite


    【解决方案1】:

    我通常喜欢使用return 而不是rewrite 进行重定向,尝试将路径与位置块匹配

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

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

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

    【讨论】:

    • 我已经尝试过了,无论原始网址是 http 还是 https,我总是被重定向到 http。
    • 你能写出你使用的新配置吗?
    • server { listen 80; listen 443 ssl; ssl_certificate ...crt_file; ssl_certificate_key ...key_file; server_name mydomain.com www.mydomain.com; root ...; location ~ /path/resource.php(.*) { return 301 $scheme://newdomain.com/newpath/resource$1; }
    • 我不知道这个,但我通常会创建 2 个不同的服务器,一个用于 ssl,一个没有。
    • 我试过不听80;符合相同的行为。在与同事进行了简短的交谈后,我开始怀疑是否可以从具有证书的域安全 301 重定向到具有另一个证书的另一个域。
    猜你喜欢
    • 2014-11-05
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2015-12-22
    • 2020-02-28
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多