NGINX通用重写规则编写:多URL路径与查询参数跳转问题
Nginx 重定向带参数请求并记录跳转URL
问题原因
你原来的rewrite规则没有显式保留查询参数,Nginx默认执行rewrite时会丢弃原请求的查询参数,导致带参数的请求跳转后丢失参数。
正确重定向配置
方法一:优化rewrite规则(保留参数)
修改配置为以下内容,通过变量自动处理有无参数的场景:
location /test/ { rewrite ^/test/(.*)$ https://example.com/$1$is_args$args permanent; }
$is_args:当请求存在查询参数时返回?,无参数时返回空字符串$args:存储原请求的查询参数(不含?)
方法二:使用return指令(更高效)
return指令比rewrite更轻量化,适合直接跳转场景,同样支持参数保留:
location ~ ^/test/(.*) { return 301 https://example.com/$1$is_args$args; }
记录最终跳转URL到日志
要在日志中记录跳转后的目标URL,需要自定义Nginx日志格式:
- 在
http全局块中添加自定义日志格式:
log_format redirect_log '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$sent_http_location"';
$sent_http_location变量会捕获Nginx发送给客户端的Location响应头,也就是最终的跳转URL
- 在对应的
server块中指定使用该日志格式:
access_log /var/log/nginx/redirect.access.log redirect_log;
之后查看指定日志文件就能看到每次跳转的目标URL了。
内容的提问来源于stack exchange,提问作者NGR
相关产品推荐
相关产品推荐

