技术解析

请教一个 Nginx 上域名 rewrite 的规则:除指定二级域名外,其他域名统统跳转到 www
0
1975-02-21 15:11:57
idczone

我不是伸手党, google 了很久没有找到应该如何写。

想实现的效果:

除指定的 xyz.abc.com 外,其他访问任何 *.abc.com 的请求(包括 http://abc.com )都跳转到 www.abc.com 上。

求高手不吝赐教…国外服务器…或给个思路。


server {
listen 80;
server_name xyz.abc.com;
/>}
server {
listen 80;
server_name www.abc.com;
blabla......
}
server {
listen 80;
server_name *.abc.com;
return 301 http://www.abc.com$request_uri;
}

if ($host != 'xyz.abc.com' ) {
rewrite ^/(.*)$ http://www.abc.com/$1 permanent;
}

在 server 段添加

感谢
感谢 @fyp0414

典型的错误之一: https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/

https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

马克

咱的思路是,默认虚拟主机,也就是 server_name 是 localhost , 301 至 www.
然后新建 xyz 的主机,解析域名的时候泛解析。
这样应该最简单。

server{
listen 80 default_server;
server_name _;
return 301 http://www.abc.com$request_uri;
}
server {
listen 80;
server_name xyz.abc.com;

}
server {
listen 80;
server_name www.abc.com;
blabla......
}

可以泛域名的么?

按照 nginx 配置的常规习惯,最后一个 server 段一般用来作“ catch all ”处理
官方文档的 sample 是这样的
server {
listen 80 default_server;
server_name _;
return 444;
}
不建议偷懒用这个来接受一切域名,可以先写一段
server_name *.abc.com *.def.net *.ghijk.org; ——所有你定义的合法域名
return 301 http://www.abc.com$request_uri; ——全部跳转去 www.abc.com ,或别的什么处理
最后再写一段 catch all server 返回 444 来拒绝可能的恶意域名指向。

确实,我自己是通过这种方式来禁用任何未经绑定的域名指向服务器的。
不过在这里,我是假定楼主做的泛域名解析到服务器,然后通过服务器来控制。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服