sor*_*rin 10 nginx http-redirect
每个nginx配置都可以用于各种域,但我想将请求自动重定向到第一个域名(官方域名).
server {
server_name a.example.com b.example.com;
}
Run Code Online (Sandbox Code Playgroud)
我希望如果有人进入b.example.com/some,直接去a.example.com/some
kol*_*ack 11
这与http://wiki.nginx.org/Pitfalls#Server_Name的GOOD示例非常相似.也就是说,您应该使用两个服务器:
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
}
Run Code Online (Sandbox Code Playgroud)
@kolbyjack 和 @Matthijs 的组合版本用一个server块来回答。此配置将重定向所有标头与example.comHost不同的请求,并仅处理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
...
}
Run Code Online (Sandbox Code Playgroud)
要在单个服务器块中执行此操作,可以使用if和$server_name变量:
server_name primary.tld secondary.tld;
if ($host != $server_name) {
rewrite ^ $scheme://$server_name permanent;
}
Run Code Online (Sandbox Code Playgroud)
或者,保留任何查询参数:
server_name primary.tld secondary.tld;
if ($host != $server_name) {
rewrite ^/(.*) $scheme://$server_name/$1 permanent;
}
Run Code Online (Sandbox Code Playgroud)
这里,$server_name指的是主要服务器名称,这是server_name指令中的名字,而$host指的是HTTP请求中给出的主机名。
请注意,ifnginx配置中的语句并不总是能满足您的期望,某些人不建议使用它。另请参阅https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
| 归档时间: |
|
| 查看次数: |
24364 次 |
| 最近记录: |