【问题标题】:How to do a redirect from www to non-www for any domain in Nginx?如何为 Nginx 中的任何域从 www 重定向到非 www?
【发布时间】:2020-12-16 12:08:58
【问题描述】:

我在 Nginx 配置中有以下 server 块:

server {
    listen 80;
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    server_name _;

    if ($scheme = http) {
       return 302 https://$host$request_uri;
    }

    location / {
        root /frontend/master;
        index index.html;
        try_files $uri $uri/ /index.html?$query_string;
    }
}

所以我已经从 http 重定向到 https。但是如何从www.example.com重定向到example.com这个规则?

UPD:这里最重要的是我们服务中的域是动态的,我们的用户自己注册它们,然后通过 DNS 设置链接它们。所以我需要重定向到非 www 而不将某些域放入 server_name 变量中。

【问题讨论】:

  • 这能回答你的问题吗? Nginx no-www to www and www to no-www
  • 您需要一个带有“server_name”的单独服务器块,包括 www。然后,重定向到非 www。 Nginx Redirect HTTP to HTTPS and WWW to Non-WWW
  • @Rob @0stone0 伙计们,最重要的是,我们项目业务逻辑中的域是动态的,因此我们的客户可以注册自己的域以通过 DNS 将其链接起来而无需提供服务。所以我不能只将域放在配置中的server_name 变量中。

标签: nginx


【解决方案1】:

试试这个

server_name ~^(www\.)?(?<hostname>.+)\.(?<zone>.+)$;

return 301 https://$hostname.$zone$request_uri;

例如,您可以使用您的主机名更改正则表达式

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 2014-03-25
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2018-12-30
    相关资源
    最近更新 更多