如何将任何非 www 子域名重定向到 www

如何将任何非 www 子域名重定向到 www

我只是想不明白如何将任何非 www 子域名重定向到 www。

当我访问没有 www 子域名的域名时,我会被重定向到www./。就好像 $domain 扩展不起作用一样。

server {
    listen          80 default_server;
    listen          [::]:80;
    listen          443 default_server;
    listen          [::]:443;
    server_name     ~^(?<sub>\.)?(?<domain>.+)$;

    if ($sub != 'www') {
        return      301 $scheme://www.$domain;
    }
}

有人能帮我弄清楚如何获得正确的配置来执行以下操作吗?

domain-a.com > www.domain-a.com
dev.domain-b.com > www.domain-b.com
www.domain-a.com > Gets to see the website.

提前致谢!

答案1

我假设您的意思是想要从*.example.com和重定向example.comwww.example.com

server {
    listen 80 default_server;
    listen [::]:80;
    listen 443 default_server;
    listen [::]:443;

    ssl_certificate /path/to/certificate;
    ssl_certificate_key /path/to/key;

    server_name ~ example\.com$;

    return 301 $scheme://www.example.com;
}

server {
    listen 80 default_server;
    listen [::]:80;
    listen 443 default_server;
    listen [::]:443;

    ssl_certificate /path/to/certificate;
    ssl_certificate_key /path/to/key;

    server_name www.example.com;

    # Other directives for www.example.com
}

第一个服务器块匹配以 结尾的任何域名example.com,并发出重定向。

第二个服务器块匹配。nginx在匹配通配符/正则表达式匹配之前www.example.com处理第一个完整匹配,如 nginx 中所述server_name文档

更好的方法是定义一个单独的default_server块,它将对对任何其他域名的请求返回 404 状态代码。

相关内容