我正在尝试将通配符子域重定向到新 URL,同时在 URL 末尾附加子域;例如sub1.example.com
将重定向到www.newdomain.example/categories/sub1
:
server {
server_name ~^(.*)\.example\.com$ ;
return 301 $scheme://newdomain.example/categories/;
}
?
我认为 Nginx 默认会添加这个,因为最后没有阻止它。
答案1
或者不使用邪恶,如果:
server {
server_name ~^(.*)\.example\.com$;
return 301 $scheme://www.newdomain.example/categories/$1$request_uri;
}
因为 $request_uri 已经包含查询字符串/参数,请参阅http://nginx.org/en/docs/http/ngx_http_core_module.html
当你不想使用 $request_uri 时,我还想提一下 $is_args $args 对
location = /from {
return 301 /to$is_args$args;
}
答案2
请参阅server_name
示例官方文档:
server {
server_name ~^(.*)\.example\.com$;
if ($query_string) {
return 301 $scheme://newdomain.example/categories/$1?$query_string;
}
return 301 $scheme://newdomain.example/categories/$1;
}
sub1.example.com 将重定向到 www.newdomain.example/categories/sub1
www.newdomain.example
或者example.com
哪个是正确的?
答案3
要重定向http://cat.example.com/post/1?comments=true
到http://example.com/categories/cat/post/1?comments=true
,您可以使用以下配置:
server {
server_name ~^(.*)\.(example\.com)$;
return 301 $scheme://$2/categories/$1$request_uri;
}
它使用带有捕获组的正则表达式server_name
以避免重复。默认情况下,在您的示例中不保留查询字符串,而在建议的配置中,它是使用保留的$request_uri
:
$request_uri
full original request URI (with arguments)