假设我有多个域名的变体,一个品牌在多个顶级域名中注册; 他们都需要去一个特定的域名+附加一个专门的自定义URI与原来请求的域相关。
例如,我有:
如果domain.com是所有请求都需要登陆的地方,那么附加一个额外的URI就可以了:
我想出了这个工作设置:
# (www.)domain.tld server { listen 80; server_name domain.tld www.domain.tld; return 301 $scheme://www.domain.com/tld$request_uri; } # (www.)domain.net server { listen 80; server_name domain.net www.domain.net; return 301 $scheme://www.domain.com/net$request_uri; } # (www.)domain.org server { listen 80; server_name domain.org www.domain.org; return 301 $scheme://www.domain.com/org$request_uri; } # (www.)domain.com server { listen 80; server_name domain.org www.domain.org; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://backend.host:port; } }
但是,多个服务器块的声明,尽pipe是逻辑的,看起来过于冗长。
TL; DR是否有办法完成这种redirect,而不必为每个域定义一个服务器块?
正则expression式server_name指令可以捕获用于redirect的域名的最后一个元素。 例如:
server { listen 80; server_name ~\.(?<tld>[^.]+)$; return 301 $scheme://www.domain.com/$tld$request_uri; }
详情请参阅此文件 。