Nginx之rewrite实现URL重写

是这样的,想请分析下,Nginx之rewrite实现URL重写
最新回答
眉眼藏欢

2024-11-06 00:43:58

URL重写是Nginx服务器的核心功能之一,用于处理如

https://aa.qq.com
转换为
https://age.qq.com/
类似的请求重定向。这部分功能主要通过ngx_http_rewrite_module模块实现,官方文档可在 nginx.org/en/docs/http/... 查看。


rewrite相关指令详解


1. set指令:在server, location, if作用域下设置自定义变量,如设置$name变量为请求参数中的'tom',如:set $name $arg_name;


2. if指令:根据条件执行后续指令,如检查变量值、正则匹配或文件/目录存在状态,如if ($name = 'tom') { ... }


3. break指令:中断当前指令链,后续指令仅在break前有效,如测试URL参数存在时执行if逻辑。


4. return指令:停止处理并返回特定状态码或URL,如return 301

https://bbb.com;


5. rewrite指令:核心重写指令,基于正则表达式匹配和替换URI,如rewrite ^/test(.*)$ /newPage$1 break;


指令应用示例


例如,实现域名重定向:当访问www.aaa.com时,使用rewrite ^https?://www.aaa.com/(.*)$

https://www.bbb.com/
$1; 将用户引导至www.bbb.com。


防盗链处理:通过if指令检查来源URL,非预期来源返回错误页面,如if ($http_referer !~* '^(https?://)?(www\.)?bbb\.com') { return 403; }。


日志记录


通过rewrite_log指令控制rewrite指令处理结果的日志记录,如rewrite_log on;


实际应用场景


rewrite指令广泛应用于网站结构优化、URL重定向、安全性控制等领域,为Nginx提供了强大的灵活性和定制性。