Nginx 捕获所有域,如果不存在则添加 www

Nginx catch all domain, then add www if not present

此设置适用于共享单个 CMS 平台的多个域。它将允许任何域指向我的服务器 ip。

我会用nginx server_name _;抓住一切。

但是如果 www 不存在,我想 301 重定向到 www(附加 www.infront)。如果有 www 就没问题。

我怎样才能做到这一点?

您可以捕获没有 www 的内容并重定向到带有此内容的 www

server {
    listen       80;
    server_name  example.com;
    return       301 http://www.example.com$request_uri;
}


server {
  listen 80;
  server_name www.example.com;
  root /path/to/site;
  # Extra conf here.
}

我已经通过使用以下 nginx 服务器配置解决了这个问题。

server {
    listen 80 default_server;
    server_name ~^(?!www\.)(?<domain>.+)$;
    return 301 $scheme://www.$domain$request_uri;
}

server {
    listen 80;
    server_name ~^(?<domain>.+)$;
    root /home/wwwroot/web;
    ..
    ..
}

这将允许任何域和 301 重定向到 www。