使用Nginx将动态顶级域名重定向到www子域
问题描述:
我试图获得它,以便我的Nginx中的任何非子域名顶级URL都被重写为www的子域名。使用Nginx将动态顶级域名重定向到www子域
因为我有大约20个指向这个服务器的顶级域名,所以我不能使用正常的服务器名称。是的,我可以为每个人写一个功能,但我可以感觉到我的灵魂开始褪色,只是说出来。
因为我在Nginx服务器的其他配置中使用这些顶级域的子域,所以我无法创建一揽子规则。
所以基本上我需要pickout example.com
/example.co.uk
/example.eu
/example.ly
都是相同的,他们重定向到WWW子域名,同时确保我只能挑他们,如果他们不是子域。
我去迄今:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ~^([^\.].*)\.(com|co.uk|eu|ly)$;
rewrite ^/(.*)$ $scheme://www.$host$request_uri permanent;
}
但是,不断增加的www
两次,使URL www.www.example.com
,我不知道为什么。
有人能告诉我发生了什么事吗?
答
正如所讨论的,要么你声明你的子域服务器块,并确定你是否也使用正则表达式,它是在服务器块重定向到www之前(正则表达式是按顺序测试的),或者你优化你的正则表达式,因此它将是^[^.]+\.(com|co.uk|eu|ly)$
。
编辑:你只在你的配置让一台服务器模块,一切都会反正抛出这一独特的服务块,所以你至少需要补充:
server {
listen 80 default_server;
listen [::]:80 default_server;
return 444;
}
所以标题不匹配正则表达式将回退到这个默认的服务器模块,连接将被nginx关闭。然后添加您的子域服务器块。
答
以于进步接受我改变了我的配置更喜欢:
server {
server_name ~^www\.[^.]+\.(com|co.uk|eu|ly)$;
return 444;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ~^[^.]+\.(com|co.uk|eu|ly)$;
rewrite ^/(.*)$ $scheme://www.$host$request_uri permanent;
}
所以现在,当后者服务器重定向它会立即通过现有服务器,但拿起第一台服务器不会皮卡第二个应该是什么。
我已经测试了几次,它似乎运作良好。
你在你的配置中如何处理子域名?你也使用一个正则表达式吗? – 2014-11-23 23:25:14
@XavierLucas我已将所有其他服务器从我的配置中取出来自行测试 – Sammaye 2014-11-23 23:30:40
所以这就是问题所在,因为您的正则表达式也与www.example.com相匹配。您需要将子域服务器块放入您的配置中,并确保(如果使用正则表达式)在发布之前声明了它(顺序测试正则表达式)。 – 2014-11-23 23:32:35