14

使用 nginx,我想重定向 to 的所有子example.comwww.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;
}
4

2 回答 2

23

在 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.localhost和添加www.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/

所以是的,这绝对有效。

于 2013-03-07T10:20:57.920 回答
13
server {
    server_name .example.com;
    return 301 http://www.example.com$request_uri;
}

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

参考:

于 2013-03-07T10:27:10.967 回答