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

如何编写Nginx Rewrite规则将文件名转换为查询参数

Nginx Rewrite规则:拆分查询参数中的房间号

你的规则无效是因为Nginx的rewrite指令默认只匹配URI路径部分,不包含?后面的查询字符串,而且正则里的?是特殊字符(匹配前面字符0或1次),所以根本没命中目标查询参数。

给你两种可行的解决方案:

方案一:直接用if匹配查询参数变量

if ($arg_name ~* ^room(\d{4})\.php$) {
    rewrite ^/download$ /download?name=room.php&room=$1? last;
}
  • $arg_name是Nginx内置变量,直接获取name参数的值
  • 正则^room(\d{4})\.php$精准匹配roomxxxx.php格式的参数,把4位房间号捕获到$1
  • 末尾的?必须加,它会丢弃原查询字符串,只保留我们构造的新参数
  • last表示执行完这条规则后,停止当前块的处理,重新匹配新的URI

方案二:先提取变量再构造新参数(更易扩展)

如果后续要处理更多参数,这种写法逻辑更清晰:

set $room_id "";
if ($arg_name ~* ^room(\d{4})\.php$) {
    set $room_id $1;
}
if ($room_id != "") {
    rewrite ^/download$ /download?name=room.php&room=$room_id? last;
}

注意事项

  • 把规则放在server块或者专门的location /download块中
  • 如果房间号长度不固定,把\d{4}改成\d+即可匹配任意位数的数字
  • 注意last和break的区别:这里用last更稳妥,因为需要重新匹配新的URI路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:05:00