我只是想不明白如何将任何非 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.com
到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 ~ 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 状态代码。