![Nginx 从子域名重定向到主域名而不改变地址栏中的 URL](https://linux22.com/image/753655/Nginx%20%E4%BB%8E%E5%AD%90%E5%9F%9F%E5%90%8D%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E4%B8%BB%E5%9F%9F%E5%90%8D%E8%80%8C%E4%B8%8D%E6%94%B9%E5%8F%98%E5%9C%B0%E5%9D%80%E6%A0%8F%E4%B8%AD%E7%9A%84%20URL.png)
我有一个域和通配符子域。
main domain: example.com
subdomains: s1.example.com, s2.example.com etc.
现在的要求是
s1.example.com
将重定向至example.com/organization/s1
s2.example.com
将重定向至example.com/organization/s2
或者我s1.example.com
的s2.example.com
配置是:
upstream frontend {
server example.com;
}
server_name ~^(?<name>.+)\.example\.com$;
location / {
proxy_pass http://frontend;
rewrite ^/$ /organization/$name break;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host example.com;
proxy_cache_bypass $http_upgrade;
}
现在我不确定我的配置中缺少什么。
答案1
这应该可行(未经测试):
server_name: *.example.com
location / {
if ($host ~* (.*)\.domain\.com) {
set $sub_domain $1;
return 301 $scheme://example.com/organization/$sub_domain;
}
}
或使用重写:
server_name *.example.com;
set $subdomain $1;
rewrite ^(.*)$ $scheme://example.com/organization/$1;
我认为最好将子域名 (*.example.com) 和主域名 (example.com) 的配置分开。如果分开,则不应proxy_pass
在子域名中使用,因为该配置仅用于重定向,不包含内容。