nginx将所有通配符子域重写为www.site.com

时间:2013-03-07 08:19:58

标签: nginx url-rewriting

使用nginx,我想将example.com的所有子域重定向到www.example.com

我在这里看到重定向将非www重定向到www或反之亦然,但我也希望重定向www2.site.com blabla.site.com。 我有域的通配符dns。

对于apache,可以通过以下方式轻松完成:

RewriteCond %{HTTP_HOST} !www.example.com [NC]
RewriteRule (.*) http://www.example.com%{REQUEST_URI} [R=301,L]

以下似乎有效,但不建议根据ifisevil page

if ($http_host !~ "www.site.com"){
    rewrite ^(.*)$ http://www.example.com$request_uri redirect;
}

2 个答案:

答案 0 :(得分:21)

在nginx中执行此操作的最佳方法是使用两个服务器块的组合:

server {
  server_name *.example.org;
  return 301 $scheme://example.org$request_uri;
}

server {
  server_name www.example.org;

  #add in further directives to serve your content
}

我在笔记本电脑上测试了这个,因为你报告它不起作用。我在本地获得了以下结果(将www2.test.localhostwww.test.localhost添加到我的/etc/hosts,以及nginx配置位,然后重新加载nginx):

$ curl --head www2.test.localhost
HTTP/1.1 301 Moved Permanently
Server: nginx/1.2.6
Date: Thu, 07 Mar 2013 12:29:32 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: http://www.test.localhost/

所以是的,这绝对有效。

答案 1 :(得分:13)

server {
    server_name .example.com;
    return 301 http://www.example.com$request_uri;
}

server {
    server_name www.example.com;
    [...]
}

参考文献: