同Nginx一样,Caddy中rewrite指令的主要功能是实现URL地址重写。
在同一个block中,rewrite指令书写安全,因为重写规则是互斥且组合的,重复的规则,只执行第一个匹配的重写。

语法

rewrite [<matcher>] <to>
  • matcher是适配器,可选参数,不指定则为请求的任意URL。
  • to是重写后的URL。

举例

重写任意请求到foo.html

rewrite * /foo.html

把API请求替换为query字符串a=b

rewrite /api/* ?a=b

保留API请求中原有的query字符串并添加新的query键值对a=b

rewrite /api/* ?{query}&a=b

改变任意请求,保留原有query字符串并把原请求path赋值给p参数

rewrite * /index.php?{query}&p={path}

相似指令

还有如下指令也有重写的作用,但作用和效果有所不同:

  • uri 可以匹配前缀、后缀、和替换字符串。
  • try_files 检查文件是否存在并重写请求。