有没有办法让 nginx 将自定义变量视为与重写规则中的 $scheme 相同?例如:
rewrite ^/redirect http://example.com;
# and
rewrite ^/redirect_with_scheme $scheme://example.com;
都会导致向客户端发送 302 重定向。但是,以下情况:
set $real_scheme $scheme;
rewrite ^/redirect_with_real_scheme $real_scheme://example.com;
将导致服务器端重写一个不一定存在的文件,然后客户端会收到 404 错误。以下代码值得一提:
set $real_scheme $scheme;
rewrite ^/redirect_with_real_scheme $real_scheme://example.com redirect;
将产生向客户端发送 302 的预期结果。不幸的是,我以这种方式设置了很多重定向,redirect
如果没有必要,我宁愿不使用该指令更新所有重定向。
如果有帮助的话,我正在使用 Nginx 1.6.2。
答案1
这文档状态:
如果替换字符串以“
http://
”、“https://
”或“$scheme
”开头,则处理停止并且重定向返回给客户端。
如果您以其他变量开头 URL,则需要redirect
明确表达意图。
答案2
我无法重现您的问题。
我尝试了以下最小配置,一切都rewrite
按预期工作(HTTP 302s):
events {
worker_connections 1024;
}
http {
include mime.types;
server {
listen 80;
set $real_scheme $scheme;
rewrite ^/redirect http://localhost;
rewrite ^/redirect_with_scheme $scheme://localhost;
rewrite ^/redirect_with_real_scheme $real_scheme://localhost;
}
}
您能否为我提供一个能够演示错误rewrite
规则的最小配置?