DNS 记录将 www 重定向到非 www

问题描述 投票:0回答:3

我正在使用 Namecheap 域名和 Vultr 托管。

我正在尝试将 DNS www 重定向到非 www。

www.example.com 至 example.com


我联系了 Vultr 并询问如何使用他们的 DNS 管理器执行此操作,他们说他们不会提供帮助,因为它是自我管理的。所以我联系了 Namecheap,他们说他们不会提供帮助,因为他们无权访问 Vultr 的 DNS 管理器,不会告诉我我向他们展示的记录是否正确,我需要联系 Vultr。所以我处于无限的支持循环中。


Vultr DNS 管理器

我按照这个答案了解如何设置 CNAME 以重定向到非 www。

Type   | Name | Data         | Seconds
--------------------------------------
A      |      | ipv4 address | 300
AAAA   |      | ipv6 address | 300
CNAME  | .    | example.com  | 300
CNAME  | www  | example.com  | 300

等了一晚上传播,www仍然可以访问,并且没有重定向。

它不允许我再做

A
记录,只能做
CNAME
。它说:

Unable to add record: A CNAME record is not allowed to coexist with any other data. 

NGINX

我遵循了本指南并尝试使用站点可用配置对其进行重定向。 Http 和 Https 都可以工作,但 www 不会重定向到非 www。

server {
    # Redirect http to https
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    # Redirect www to non-www
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

server {
    listen 443 ssl default_server;

    ssl on;
    ssl_certificate /etc/nginx/ssl/cert_chain.crt;
    ssl_certificate_key /etc/nginx/ssl/example_com.key;
    ssl_protocols  TLSv1.1 TLSv1.2;

    server_name example.com;
    ...
http-redirect nginx dns server
3个回答
32
投票

DNS 无法将您的 www 站点重定向到非 www 站点。 DNS 的唯一目的是使用

A
AAAA
CNAME
记录将 www 和非 www 指向服务器的 IP 地址(区别不大)。
nginx
配置负责执行从 www 到非 www 的重定向。

您的第二个服务器块旨在从 www 重定向到非 www,但目前仅处理

http
连接(在端口 80 上)。

您可以移动默认服务器并使用它将所有内容重定向到预期的域名。例如:

ssl_certificate /etc/nginx/ssl/cert_chain.crt;
ssl_certificate_key /etc/nginx/ssl/example_com.key;

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;
    ...
}

假设您拥有 www 和非 www 域名的通用证书,您可以将

ssl_
指令移至外部块中,并允许它们继承到两个服务器块中(如上所示)。

请参阅此文档了解更多信息。


7
投票

您可以通过在 nginx 配置文件中添加 new 服务器块将 www 定向到非 www。

第 1 步:将以下服务器块添加到您的 nginx 配置文件中。

server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

第2步:重启nginx。

sudo systemctl restart nginx

0
投票

好吧,这不起作用,只是尝试重新启动时出现错误。

© www.soinside.com 2019 - 2024. All rights reserved.