请教一个 Nginx 上域名 rewrite 的规则:除指定二级域名外,其他域名统统跳转到 www

2015-11-17 10:00:09 +08:00
 zangbob

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

想实现的效果:

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

求高手不吝赐教……或给个思路。

5490 次点击
所在节点    NGINX
12 条回复
predator
2015-11-17 10:05:23 +08:00
server {
listen 80;
server_name xyz.abc.com;
#blabla......
}

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

server {
listen 80;
server_name *.abc.com;
return 301 http://www.abc.com$request_uri;
}
fyp0414
2015-11-17 10:13:34 +08:00
if ($host != 'xyz.abc.com' ) {
rewrite ^/(.*)$ http://www.abc.com/$1 permanent;
}
fyp0414
2015-11-17 10:13:54 +08:00
@fyp0414 在 server 段添加
zangbob
2015-11-17 10:19:13 +08:00
感谢 @predator
感谢 @fyp0414
ryd994
2015-11-17 11:10:37 +08:00
roychan
2015-11-17 11:51:22 +08:00
zhenhua2340
2015-11-17 14:11:25 +08:00
马克
TrustyWolf
2015-11-17 17:10:04 +08:00
咱的思路是,默认虚拟主机,也就是 server_name 是 localhost , 301 至 www.
然后新建 xyz 的主机,解析域名的时候泛解析。
这样应该最简单。
zsen
2015-11-18 09:17:16 +08:00
server{
listen 80 default_server;
server_name _;
return 301 http://www.abc.com$request_uri;
}

server {
listen 80;
server_name xyz.abc.com;
#blabla......
}

server {
listen 80;
server_name www.abc.com;
# blabla......
}
zsen
2015-11-18 09:18:47 +08:00
@predator 可以泛域名的么?
predator
2015-11-18 12:45:18 +08:00
@zsen 按照 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 来拒绝可能的恶意域名指向。
zsen
2015-11-18 14:00:08 +08:00
@predator 确实,我自己是通过这种方式来禁用任何未经绑定的域名指向服务器的。
不过在这里,我是假定楼主做的泛域名解析到服务器,然后通过服务器来控制。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/236682

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX