nginx子域重写

又一个nginx重写规则问题

我怎样才能从http://www.*.domain.com重写到http://*.domain.com

提前致谢

– Deb

编辑:

对不起,我没有看到纺织格式从我的问题中删除*。 我现在修好了 我需要做的是从www.joe.domain.com到joe.domain.com,joe可以是任何单词。

domain.com之前的额外时间的意义是什么? 目标是从URL中删除www? 如果是这样,这应该做的伎俩:

 if ($host ~* www\.(.*)) { set $host_without_www $1; rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo' } 

不要忘了: sudo /etc/init.d/nginx restart来加载它

来源: NGINX Wiki

这是一个相当黑客。

性能明智的最快方式是

 server { server_name www.domain.com; rewrite ^ http://domain.com$request_uri permanent; } 

你保存一个正则expression式匹配以及两个捕获,再加上你使用哈希表来查找匹配的服务器块的好处。

此外,您不需要重新启动nginx – 重新加载是所有必需的,谁愿意有更多的停机时间比所需?

您可以使用正则expression式服务器名称(请参阅http://nginx.org/en/docs/http/server_names.html#regex_names ):

 server { listen 80; listen 443; server_name ~^www\.(\w+)\.domain\.com$ location / { rewrite ^ $scheme://$1.domain.com$request_uri permanent; } } 

马丁F的解决scheme都很好,直到你有数百个域名。 但是,我会build议以另一种方式 – 在www.joe.domain.com上提供应用程序,并从joe.domain.comredirect。 很确定这是在RFC中。