【发布时间】: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