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

如何在Nginx rewrite过程中对$request_uri进行base64编码

Nginx重定向时对$request_uri做Base64编码的实现方案

标准Nginx默认未内置Base64编码能力,需额外安装ngx_http_set_misc_module扩展模块,若使用OpenResty则该模块默认已集成,可直接使用。

方案1:使用set-misc模块实现(通用推荐)

修改配置如下即可,原有冗余的rewrite ^ $request_uri;规则可以直接删除:

server {
   listen 443 default_server;
   ssl_certificate /etc/ssl/private/nginx/certificate.crt;
   ssl_certificate_key /etc/ssl/private/nginx/key.key;

   # 生成URL安全的Base64编码,自动替换特殊字符、删除尾部填充位
   set_encode_base64url $encoded_req "$host$request_uri";
   return 302 https://my.domain.com/?req=$encoded_req;
}

使用set_encode_base64url而非普通Base64编码的原因是它会自动将+替换为-、/替换为_,并删除尾部的=填充字符,完全避免特殊字符干扰URL参数解析。

方案2:Lua脚本实现(仅OpenResty环境可用)

如果不想单独安装扩展模块,OpenResty环境可直接调用内置Lua函数实现编码:

server {
   listen 443 default_server;
   ssl_certificate /etc/ssl/private/nginx/certificate.crt;
   ssl_certificate_key /etc/ssl/private/nginx/key.key;

   set $req_content "$host$request_uri";
   rewrite_by_lua_block {
       -- 第二个参数为true时生成URL安全的Base64编码,自动移除尾部填充位
       ngx.var.req_content = ngx.encode_base64(ngx.var.req_content, true)
   }
   return 302 https://my.domain.com/?req=$req_content;
}

注意事项

接收重定向请求的服务端,需要对拿到的req参数做URL安全Base64解码,补全对应长度的=填充位即可得到原始的域名+请求路径内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:45:07