我有 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
我需要设置我的https
,https://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
,则很难给出有效的示例。