重定向到 SSL 有效,但获取变量不起作用

重定向到 SSL 有效,但获取变量不起作用

我有 nginx,在服务器部分和端口 80 中,我将主机重定向到端口 443,例如:

server {
   location / {
       return 307 https://$host$request_uri/?lang=fa
   }
}

它可以工作并重定向到 SSL,但是当我将位置放入 SSL 块中时,我会递归地得到如下结果:

https://mydomain//?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa/?lang=fa

我需要设置我的httpshttps://mydomain/?lang=fa但不知道如何设置。

答案1

看起来变量运行得很好。问题是,您基本上只添加 URL 查询字符串部分,因此 URI 路径部分将保持不变:location /重定向后也会匹配(并合并连续的斜杠),因此您将获得无限递归。

这是因为 URL 规范规定查询字符串参数的顺序不重要,即对 的请求https://mydomain/?lang=fa&foo=bar应与对 的请求视为相同https://mydomain/?foo=bar&lang=fa

nginxlocation将仅匹配 URI 路径部分。看这个问题在服务器故障:

问题:nginx 位置块可以匹配 URL 查询字符串吗?

简短回答:不。

文档参考:https://nginx.org/en/docs/http/request_processing.html

如果不知道添加该部分后您实际想要对请求执行什么操作?lang=fa,则很难给出有效的示例。

相关内容