nginx 根据 $request_uri 重定向

nginx 根据 $request_uri 重定向

在我的默认站点配置文件中,我有以下重定向来强制执行 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不包含请求的查询参数。

有两个选项:

  1. $args在参数后添加返回值lang

return 301 https://example.com?lang=fr&$args:

  1. 使用地图:

http级别中,你定义地图:

map $args $redirargs {
    "~.+" $args&lang=fr;
    default lang=fr;
}

然后使用

return 301 http://example.com$request_uri?$redirargs;

相关内容