假设我有一个名为的网站xyz.co
,我还有其他具有相同前缀的域名,例如xyz.com, xyz.it, xyz.co.it
目前,nginx 在 中运行良好,我server_name xyz.co
希望将所有其他域重定向到 ,同时我希望将上述版本重定向到。我该如何实现这一点?这是 nginx 网络服务器级别更改吗?还是我需要在 中进行更改?nginx.conf
port 80
xyz.co
www.*
xyz.co
DNS
答案1
server {
listen 80;
server_name www.xyz.co xyz.com xyz.it xyz.co.it www.xyz.com www.xyz.it www.xyz.co.it;
rewrite ^ http://xyz.co$request_uri? permanent;
}
server {
listen 80;
server_name xyz.co;
....................
....................
....................
}
permanent
如果您想要 302 重定向而不是 301,则可以从重写指令中删除标志。
答案2
server {
server_name ~^(?:www\.)?xyz\.(?:com|(?:co\.)?it)$;
return http://xyz.co$request_uri;
}
或更有效:
server {
listen 80;
server_name xyz.com www.xyz.com
xyz.it www.xyz.it
xyz.co.it www.xyz.co.it;
return http://xyz.co$request_uri;
}
- http://nginx.org/r/服务器名称
- http://nginx.org/r/return
- 语法
- 人 pcrepattern
答案3
文档http://wiki.nginx.org/HttpRewriteModule
if ($http_host ~* "(www\.)?xyz\.(com|(co\.)?it)"){
rewrite ^(.*)$ http://xyz.co/$1 break;
}
这需要测试和修改以适应口味,但一些快速测试表明它应该可以满足您的需要。
更新根据 VBart 提供的参考:http://nginx.org/en/docs/http/converting_rewrite_rules.html是一种更好的方法,为了实现您的要求,请参阅他提供的答案。