如何调整Caddyfile实现路径重写并追加指定URL参数?
问题描述
我当前使用Caddy作为反向代理,现有Caddyfile配置如下:
rewrite / /index.html
该配置可实现:
https://localhost/-->https://localhost/index.htmlhttps://localhost/?p1=v1&p2=v2-->https://localhost/index.html?p1=v1&p2=v2
现在需要额外实现将路径/static重写为index.html,同时追加URL参数static=true,且该参数不能影响原有参数,即:
https://localhost/static-->https://localhost/index.html?static=truehttps://localhost/static?p1=v1&p2=v2-->https://localhost/index.html?static=true&p1=v1&p2=v2
尝试了以下配置但未生效:
rewrite /static /index.html?static=true
请问应如何调整Caddyfile以实现需求?
解决方案
你之前的配置会直接覆盖原有请求的查询参数,正确的做法是利用Caddy的内置变量{query}保留原有参数,同时追加新参数。调整后的Caddyfile如下:
# 保留原有根路径的重写规则 rewrite / /index.html # 处理/static路径的重写,追加static=true并保留原有参数 rewrite /static { to /index.html?static=true{query} }
配置说明
{query}是Caddy的内置变量,会自动获取请求中原有的查询字符串(例如请求/static?p1=v1时,{query}的值是&p1=v1)。当请求没有原有参数时,{query}为空,最终重写结果就是/index.html?static=true;当存在原有参数时,会自动拼接成目标格式,完全满足需求。- 规则顺序上,由于
/static和/是两个独立路径,顺序不影响匹配结果;若后续有更复杂的前缀匹配规则,建议将更具体的规则放在前面。
内容的提问来源于stack exchange,提问作者michaelT
相关产品推荐
相关产品推荐

