【问题标题】:Redirect dynamic top level domains to www subdomains with Nginx使用 Nginx 将动态顶级域重定向到 www 子域
【发布时间】:2014-11-23 23:11:19
【问题描述】:

我正在尝试获取它,以便我的 Nginx 中的任何非子域顶级 URL 都被重写为 www 的子域。

因为我有大约 20 个顶级域指向该服务器,所以我无法使用普通的服务器名称。是的,我可以为每个函数编写一个函数,尽管我能感觉到我的灵魂开始褪色。

我无法创建一揽子规则,因为我在 Nginx 服务器的其他配置中使用了这些顶级域的子域。

所以基本上我需要选择example.com/example.co.uk/example.eu/example.ly 并将它们重定向到他们的 www 子域,同时确保我只在它们不是子域时才选择它们。

我走了这么远:

    server {
            listen 80 default_server;
            listen [::]:80 default_server;
            server_name ~^([^\.].*)\.(com|co.uk|eu|ly)$;
            rewrite ^/(.*)$ $scheme://www.$host$request_uri permanent;
    }

但是,它不断添加www 两次,使URL 成为www.www.example.com,我不知道为什么。

谁能告诉我这是怎么回事?

【问题讨论】:

  • 如何在配置中处理子域?你也在为他们使用一个正则表达式吗?
  • @XavierLucas 我目前已将所有其他服务器从我的配置中移除,以便自行测试
  • 这就是问题所在,因为您的正则表达式也匹配 www.example.com。您需要将子域服务器块放入您的配置中,并确保,如果使用正则表达式,则在您的帖子中声明它(正则表达式按顺序测试)。
  • @XavierLucas 如果我没有 www 服务器,服务器名称正则表达式可以匹配 www?
  • 当然,没有什么能阻止它:([^\.].*) 也匹配 www.example 因为 .* 部分。

标签: nginx


【解决方案1】:

如前所述,您要么声明您的子域服务器块,并确保您是否也在使用正则表达式,它在重定向到 www 的服务器块之前(正则表达式被顺序测试),或者您优化您的正则表达式,使其成为 @987654321 @。

编辑:由于您只让一个服务器阻塞在您的配置中,所以无论如何都会抛出这个唯一的服务器阻塞,所以您至少需要添加:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    return 444;
}

因此,与正则表达式不匹配的标头将回退到此默认服务器块中,并且连接将被 nginx 关闭。然后添加您的子域服务器块。

【讨论】:

  • 这也重定向到 www.www。明天我会尝试添加一个 www 服务器块,看看是否有帮助
  • 不,它没有,用 curl 测试它(浏览器缓存响应标头)。
  • 好的,我会清除 chrome、IE、Opera、FF 和 Safari 的缓存,但我会尝试使用 curl
  • 是否 wget 缓存,因为我只是第一次尝试它,我看到它做了 3 个重定向,一个到 www。然后又是一个
  • 哼,你让一个默认服务器阻止不匹配的主机头吗?将server { listen 80 default_server; } 添加到您当前的配置中,以便它在不同的服务器块中回退。删除包含正则表达式的块中的 default_server 指令。
【解决方案2】:

作为接受的进步,我将配置更改为更像:

server {
    server_name ~^www\.[^.]+\.(com|co.uk|eu|ly)$;
    return 444;
}


server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name ~^[^.]+\.(com|co.uk|eu|ly)$;
    rewrite ^/(.*)$ $scheme://www.$host$request_uri permanent;
}

所以现在当后一个服务器重定向时,它会立即被前一个服务器接收,但第一个服务器不会接收第二个服务器应该接收的内容。

我已经测试了几次,它似乎运行良好。

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 2017-12-03
    • 2020-12-31
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2017-12-01
    相关资源
    最近更新 更多