nginx 301 重定向不适用于 www. 子域名

nginx 301 重定向不适用于 www. 子域名

我正在尝试使用 nginx 创建从一个域到另一个域的 301 重定向。这是我目前正在做的事情,它按我想要的方式工作:

   server {
        listen      80;
        server_name domain.net;
        return 301 $scheme://www.domain.net$request_uri;
    }

    server {
            listen       80;
            server_name  www.domain.net;
            ...
    }

我想修改第一个服务器块以包含 .co 域名并重定向到 www.domain.net:

   server {
        listen      80;
        server_name domain.net domain.co www.domain.co;
        return 301 $scheme://www.domain.net$request_uri;
    }

但是,当我输入 www.domain.co 时,网站加载正常,但地址栏仍然显示 www.domain.co 而不是 www.domain.net。同样,执行 curl -I www.domain.co 会显示 200 而不是 301。省略 www. 并仅输入 domain.co 会将我发送到 www.domain.net。curl -I domain.co 也会返回正确的 301。

知道为什么添加 www 后不起作用吗?我已经尝试了一段时间,但搜索/反复试验都无果。

答案1

您的 nginx 重写规则看起来不错。

导致此问题的最可能原因是您的 DNS 记录尚未更新。请仔细检查,确保您已将 domain.co 和 www.domain.co 的 DNS A 记录指向正确的地址。如果您最近更新了 DNS 记录,则可能需要更多时间才能传播更新并让旧记录过期。这反映在您的 DNS SOA 记录中的生存时间 (TTL) 值中。

最后,如果您更新了 nginx 配置,您还需要重新加载/重新启动 nginx。

相关内容