# ============================================================ # Nginx URL 重写规则配置示例 # ============================================================ # # 功能说明: # - URL 重写和重定向 # - 正则表达式匹配 # - flag 参数控制行为 # # Lolly 对应配置: # server: # rewrite: # - pattern: "^/old/(.*)$" # replacement: "/new/$1" # flag: "last" # 可选值: last, redirect, permanent, break # ============================================================ http { server { listen 80; server_name rewrite.example.com; # rewrite 指令语法 # rewrite regex replacement [flag]; # Lolly 对应: rewrite 配置列表 # 永久重定向(301) # Lolly 对应: flag: "permanent" rewrite ^/old-page$ /new-page permanent; rewrite ^/old/(.*)$ /new/$1 permanent; # 临时重定向(302) # Lolly 对应: flag: "redirect" rewrite ^/download/(.*)$ /files/$1 redirect; # 内部重写(不改变 URL) # Lolly 对应: flag: "last" rewrite ^/api/v1/(.*)$ /api/$1 last; rewrite ^/user/(.*)$ /profile/$1 last; # break - 停止处理后续规则 rewrite ^/static/(.*)$ /assets/$1 break; # 带参数的重写 # $1, $2 等捕获组引用 rewrite ^/category/([0-9]+)/([0-9]+)$ /products?cat=$1&page=$2 last; # 不追加原参数(结尾加 ?) rewrite ^/search/(.*)$ /query?term=$1? last; # 基于条件的重写 if ($request_method = POST) { rewrite ^/api$ /api/handler last; } # 移除 .php 扩展名 rewrite ^/(.*)\.php$ /$1 last; location / { root /var/www/html; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://backend:8080; } } } # rewrite flag 说明: # # 1. last: # - 停止当前 rewrite 规则处理 # - 开始搜索新 location(重新进入处理循环) # - 常用于内部重写 # - Lolly 对应: flag: "last" # # 2. break: # - 停止当前 rewrite 规则处理 # - 继续在当前 location 中处理 # - 不会重新搜索 location # - Lolly 对应: flag: "break" # # 3. redirect: # - 返回 302 临时重定向 # - 客户端 URL 改变 # - Lolly 对应: flag: "redirect" # # 4. permanent: # - 返回 301 永久重定向 # - 搜索引擎会更新索引 # - Lolly 对应: flag: "permanent" # # 参数处理说明: # # 1. 默认行为: # replacement 中不包含参数时,原请求参数自动追加 # rewrite ^/a$ /b; # /a?x=1 -> /b?x=1 # # 2. 新参数: # replacement 包含参数时,原参数追加到新参数后 # rewrite ^/a$ /b?y=2; # /a?x=1 -> /b?y=2&x=1 # # 3. 不追加原参数: # replacement 以 ? 结尾时不追加原参数 # rewrite ^/a$ /b?; # /a?x=1 -> /b # rewrite ^/a$ /b?y=2?; # /a?x=1 -> /b?y=2