如何配置nginx自动重定向到主主机名?
每个nginx配置都可以用于各种域,但我想自动将请求重定向到第一个域名(正式域名)如何配置nginx自动重定向到主主机名?,nginx,http-redirect,Nginx,Http Redirect,每个nginx配置都可以用于各种域,但我想自动将请求重定向到第一个域名(正式域名) 我希望如果有人进入b.example.com/some,直接进入a.example.com/some,这与我们的好例子差不多。也就是说,您应该使用两台服务器: server { server_name b.example.com; return 301 $scheme://a.example.com$request_uri; # For pre-0.8.42 installations: # r
我希望如果有人进入
b.example.com/some
,直接进入a.example.com/some
,这与我们的好例子差不多。也就是说,您应该使用两台服务器:
server {
server_name b.example.com;
return 301 $scheme://a.example.com$request_uri;
# For pre-0.8.42 installations:
# rewrite ^ $scheme://a.example.com$request_uri? permanent;
}
server {
server_name a.example.com;
# Do stuff
}
要在单个服务器块中执行此操作,可以使用if和: 或者,要保留任何查询参数:
server_name primary.tld secondary.tld;
if ($host != $server_name) {
rewrite ^/(.*) $scheme://$server_name/$1 permanent;
}
这里,指的是主服务器名称,它是server\u name
指令中的第一个名称,而指的是HTTP请求中给出的主机名
请注意,nginx配置中的if
语句并不总是能达到预期效果,有些人不鼓励使用它。另见
这个答案的灵感来自于它使用了一个类似的aproach。组合版本的@kolbyjack和@Matthijs answers,并带有一个
服务器
块。此配置将重定向所有头与example.com不同的Host
请求,并仅处理example.com请求
server {
server_name example.com a.example.com b.example.com;
if ($host != $server_name) {
return 301 $scheme://$server_name$request_uri;
}
# processing requests to $server_name (example.com) only
...
}
server\u name*.example.com
将捕获任何子域,包括www
和porno
™ 和无论什么
,如果有人想要将任何内容重定向到主域。对于http->https重定向,您可以通过使用server\u name.example.com
包含任何内容-它将同时重定向example.com和*.example.com。@当使用.example.com
时,DmitryVerhoturov有什么好方法可以指示www.
等变体应重定向到example.com
?如果不使用性能降低的“如果”条件?@PKHunter,.example.com
是覆盖*.example.com
的最佳方法。但是如果使用ssl,并且两个站点都具有相同的证书,会发生什么情况?这肯定会打破SNI?
server_name primary.tld secondary.tld;
if ($host != $server_name) {
rewrite ^/(.*) $scheme://$server_name/$1 permanent;
}
server {
server_name example.com a.example.com b.example.com;
if ($host != $server_name) {
return 301 $scheme://$server_name$request_uri;
}
# processing requests to $server_name (example.com) only
...
}