在 nginx 中使用正则表达式重定向子域 [英] Redirecting a subdomain with a regular expression in nginx
问题描述
nginx 文档说 server_name 指令支持正则表达式.我一直在用头撞墙,试图让一个微不足道的正则表达式工作.
The nginx documentation says that the server_name directive supports regular expressions. I've been banging my head against the wall trying to get even a trivial regex working.
我希望 http://subdomain.mydomain.com 重定向到 http://mydomain.com/subdomain
这是我的代码.
server {
server_name "~^subdomain.mydomain.com$";
rewrite ^ http://mydomain.com/subdomain;
}
另外,可能值得注意.在 nginx 配置文件的更下方有一条规则:
Also, potentially noteworthy. Further down in the nginx config file there is a rule:
server {
server_name *.mydomain.com
...
}
我做错了什么?
更新:
有人建议我不要为此使用正则表达式......以提供更清晰的信息:琐碎的正则表达式只是为了排除故障.真正的正则表达式看起来更像是...
It has been suggested that I not use regex for this... to offer a little more clarity: the trivial regex was simply for purposes of troubleshooting. The real regex will look more like...
server {
server_name "~^.*(cvg|cincinnati).fakeairport(app)?.(org|com)$";
rewrite ^ http://fakeairport.com/cincinnati;
}
server {
server_name "~^.*(lex|lexington).fakeairport(app)?.(org|com)$";
rewrite ^ http://fakeairport.com/lexington;
}
所以最好使用正则表达式.
So it would be preferable to use regex.
推荐答案
回答一个老问题以帮助他人
To answer an old question to help others
使用 nginx 1.1.19,您可以执行以下操作:
using nginx 1.1.19 you can do the following:
server {
server_name ~^(?<subdomain>w+).domainA.com$;
location / {
rewrite ^ https://$subdomain.domainB.com$request_uri permanent;
}
}
domainA.com 之前的子域匹配并存储在变量 $subdomain 中,然后可以在重写中使用.这将像 xxx.domainA.com 这样的 url 重写为 xxx.domainB.com,并且只有一个服务器指令.
The subdomain before domainA.com is matched and stored in variable $subdomain which then can be used in the rewrite. This rewrites url like xxx.domainA.com to xxx.domainB.com with only one server directive.
这篇关于在 nginx 中使用正则表达式重定向子域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!