最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 Rewrite 规则如何编写与使用
时间:2026-08-12 12:17:49 编辑:袖梨 来源:一聚教程网
Nginx rewrite规则本质是URL重写,通过rewrite指令配合正则表达式和flag(如last、break、redirect、permanent)实现路径修改或跳转,须置于server/location块中,慎用if块。
Nginx 的 rewrite 规则本质是 URL 重写,用于修改请求路径、跳转或内部重定向,核心靠 rewrite 指令配合正则表达式和标志位实现。
rewrite 指令的基本语法与位置
rewrite 必须写在 server、location 或 if 块中(不推荐在 if 中滥用),格式为:
rewrite <正则表达式> <替换目标> [<flag>];
- 正则表达式默认区分大小写,可用
~*表示不区分大小写匹配 - 替换目标支持变量(如 $1、$2 捕获组,$host、$request_uri 等内置变量)
- 常见 flag:
last(内部重定向,结束当前 location 匹配后重新搜索;break(停止 rewrite 处理,不再执行后续 rewrite;redirect(302 临时跳转);permanent(301 永久跳转)
常用场景与写法示例
实际中多数需求可归为几类:
-
去掉 URL 中的 .php 后缀:
rewrite ^/(.*).php$ /$1 permanent;注意需配合 fastcgi_pass 正确处理,否则可能 404 -
强制 HTTPS 跳转:
if ($scheme = http) { rewrite ^ https://$host$request_uri? permanent; }更推荐用 return(性能更好):return 301 https://$host$request_uri; -
统一入口(如前端 SPA):
location / { try_files $uri $uri/ /index.html; }或显式 rewrite:rewrite ^(.*)$ /index.html last;(需确保 index.html 存在) -
目录别名映射:
rewrite ^/old-path/(.*)$ /new-path/$1 break;使用 break 避免循环重写,且不触发 location 重匹配
调试与避坑要点
rewrite 容易因顺序、作用域或 flag 误用导致意外行为:
- rewrite 执行顺序从上到下,一旦匹配并带
last或redirect等 flag,后续 rewrite 不再执行 - 避免在 if 块中大量使用 rewrite,Nginx 最新明确建议优先用
map或return替代 - 测试正则时用在线工具(如 regex101)验证捕获是否准确,注意 Nginx 使用 PCRE,不支持 d 等简写,推荐用
[0-9] - 启用
error_log /path/to/log notice;可查看 rewrite 日志(需编译时开启 --with-debug)
替代方案:更推荐的写法
很多 rewrite 场景其实有更简洁、安全的替代方式:
- 跳转优先用
return:性能高、语义清晰,例如return 301 https://$host$request_uri; - 静态文件路由用
try_files:比 rewrite 更高效,如 SPA 路由、多级 fallback - 复杂逻辑用
map预定义变量:适合基于 host、user-agent 等条件做分流,避免嵌套 if - URL 参数处理尽量在应用层完成,Nginx 仅做路径层面干预
rewrite 功能强大但需谨慎使用,理解其执行时机和 flag 差异是关键。简单跳转用 return,路径改写用 rewrite + break/last,复杂逻辑尽量下沉或换方案。
相关文章
- 龙魂旅人如何送好友角色 龙魂旅人送好友角色方式和游戏玩法分享 08-12
- 龙魂旅人龙骨遗城通关攻略:全流程打法与BOSS应对实用技巧 08-12
- 迅捷 FW326R 无线路由器上网时间控制 08-12
- 龙魂旅人魔物推荐与详细攻略:高效刷怪与属性克制指南 08-12
- 龙魂旅人训练营最强阵容搭配与实战攻略 08-12
- 龙魂旅人牧师转职攻略:技能搭配、职业选择与进阶技巧详细说明 08-12