又一个 nginx 重写规则问题
http://www.*.domain.com
我怎样才能从到重写http://*.domain.com
?
提前致谢
-- 黛布
编辑:
很抱歉,我没有看到 Textile 格式已将问题中的 * 删除。我现在修复了它。我需要做的是从 www.joe.domain.com 转到 joe.domain.com,其中 joe 可以是任何单词。
答案1
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 维基百科
答案2
这真是太黑客了。
性能方面最快的方法是
server {
server_name www.domain.com;
rewrite ^ http://domain.com$request_uri permanent;
}
您保存了一个正则表达式匹配以及两个捕获,另外您还可以利用 nginx 使用哈希表来查找匹配的服务器块。
此外,您不需要重新启动 nginx - 只需重新加载即可,谁会希望有比所需更多的停机时间?
答案3
您可以使用正则表达式服务器名称(请参阅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;
}
}
答案4
Martin F 的解决方案很好,但您拥有数百个域名时就不行了。不过,我建议采用另一种方法 - 在 www.joe.domain.com 上提供应用程序,然后从 joe.domain.com 重定向。我确信这是在 RFC 中。