You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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日志格式:

  1. 在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
  1. 在对应的server块中指定使用该日志格式:
access_log /var/log/nginx/redirect.access.log redirect_log;

之后查看指定日志文件就能看到每次跳转的目标URL了。

内容的提问来源于stack exchange,提问作者NGR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:45:11