【问题标题】:nginx rewrite all wildcard subdomains to www.site.com [closed]nginx将所有通配符子域重写为www.site.com [关闭]
【发布时间】:2013-02-22 08:38:18
【问题描述】:

使用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;
}

【问题讨论】:

    标签: nginx url-rewriting


    【解决方案1】:

    在 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/
    

    所以是的,这绝对有效。

    【讨论】:

    • 请不要使用rewrite ^ permanent 而不是简单的return。在这种情况下,执行正则表达式(即使是这么简单的^)只是在浪费 CPU。
    • 好点,改变了
    • 试过了,它不起作用,不发送 301 标头,不重定向到 www.site.com 实际上它重定向到服务器上的不同站点,但离开 subdomain.site。 com 在地址栏中
    • 有人实际尝试过,还是代码只是理论?
    • 不,你有一个*.example.com通配符 serverblock 和www.example.comexact match serverblock。因此 www.example.com 不会被重写,因为它是在第二个块而不是第一个块中处理的。 server_name 的匹配顺序为:1 - 确切名称,2 - 以 * 开头的最长匹配,3 - 以 * 结尾的最长匹配,4 - 第一个正则表达式匹配(如 nginx.org/en/docs/http/ngx_http_core_module.html#server_name 中所述)
    【解决方案2】:
    server {
        server_name .example.com;
        return 301 http://www.example.com$request_uri;
    }
    
    server {
        server_name www.example.com;
        [...]
    }
    

    参考资料:

    【讨论】:

    • 试过了,它不起作用,不发送 301 标头,也不重定向到 www.site.com 实际上它重定向到服务器上的不同站点,但离开 subdomain.site。 com 在地址栏中
    • 问题可能是site.com 不匹配*.site.com(不是点)。
    • 我试过 .site.com 根据手册同时捕获 *.site.com 和 site.com
    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 2014-12-29
    • 2012-05-29
    • 2012-07-08
    • 2017-03-21
    相关资源
    最近更新 更多