1 简介
rewrite模块即ngx_http_rewrite_module
模块,主要功能是改写请求URI,是Nginx默认安装的模块。rewrite模块会根据PCRE正则匹配重写URI,然后发起内部跳转再匹配location,或者直接做30x重定向返回客户端。rewrite其实就是做了uri的映射
2 rewrite语法格式及参数语法
rewrite是实现URL重写的关键指令,根据regex (正则表达式)部分内容, 重定向到replacement,结尾是flag标记。
rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 flag标记
关键字:其中关键字error_log不能改变
正则:perl兼容正则表达式语句进行规则匹配
替代内容:将正则匹配的内容替换成replacement
flag标记:rewrite支持的flag标记
flag标记说明:
last #本条规则匹配完成后,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
3 rewrite参数的标签段位置
可以在下面这些地方使用
server,location,if
4 写法
rewrite ^/[0-9]+$ /teacher.shtml?testParam=$1 break; #地址重写
rewrite为固定关键字,表示开始进行rewrite匹配规则
^/[0-9]+$是正则表达式,匹配路径
替代部分是/index.html?testParam=$1,$1是对应前面第一个匹配参数,也就是取自^/[0-9]+。匹配成功后跳转到的URL。
flag部分break表示本条规则匹配完成即终止,不再匹配后面的任何规则
此时如访问:192.168.28.110/123 实际会访问http://www.atguigu.com/teacher.shtml?testParam=123
5 示例
5.1 配置
现有一个nginx:192.168.28.110:80
nginx配置如下:
rewrite ^/[0-9]+$ /teacher.shtml?testParam=$1 break; #地址重写
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name nginx1.com;
location / {
proxy_pass http://www.atguigu.com/; #方向代理
rewrite ^/[0-9]+$ /teacher.shtml?testParam=$1 break; #地址重写
#root /usr/local/mynginx/nginx1;
#index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
5.2 访问
1)直接访问
http://www.atguigu.com/teacher.shtml
2)访问nginx
http://192.168.28.110/123
在访问上面地址时,
取192.168.28.110后面的uri去和rewrite的表达式匹配
^/[0-9]+$表示任意数量的数字,123匹配上了
那么就会使用/teacher.shtml?testParam=$1替代123
$1就是取第一个匹配的值,也就是123,也就是/teacher.shtml?testParam=123
完整的就是http://192.168.28.110/teacher.shtml?testParam=123
由于配置了方向代理,所以实际访问的就是http://www.atguigu.com/teacher.shtml?testParam=123
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?