我不是伸手党, 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 来拒绝可能的恶意域名指向。
确实,我自己是通过这种方式来禁用任何未经绑定的域名指向服务器的。
不过在这里,我是假定楼主做的泛域名解析到服务器,然后通过服务器来控制。