在我的默认站点配置文件中,我有以下重定向来强制执行 https :
server {
listen 80;
server_name www.example.com example.com;
return 301 https://example.com$request_uri;
}
我想添加一个子域名,但要将其重定向到带有参数的网站。例如 fr.example.com -->https://example.com?lang=fr
如果我做:
return 301 https://example.com$request_uri&lang=fr;
它会添加 '&lang=fr' 不管是否有其他参数$请求uri或不。
如何根据 $request_uri 的内容有条件地定义“?”或“&”?
我尝试了以下操作:
server {
listen 80;
server_name fr.example.com;
if ($request_uri ~ ""){
return 301 https://example.com?tlang=fr;
}
return 301 https://example.com$request_uri&tlang=fr;
}
但就这样,整个网站都失败了。
谢谢
答案1
首先,$request_uri
不包含请求的查询参数。
有两个选项:
$args
在参数后添加返回值lang
:
return 301 https://example.com?lang=fr&$args:
- 使用地图:
在http
级别中,你定义地图:
map $args $redirargs {
"~.+" $args&lang=fr;
default lang=fr;
}
然后使用
return 301 http://example.com$request_uri?$redirargs;