当前位置: 首页 > news >正文

nginx rewrite地址重写

常用的nginx正则表达式

^匹配以...开头的字符串
$匹配以...结尾的字符串
^$^$表示空行
*匹配前面的字符0次或者多次(通配符*表示任意数量的任意字符)
+匹配前面的字符1次或多次
?匹配前面的字符0次或1次
.匹配除了“\n”之外的任意单个字符,[.\n]表示匹配包括“\n”在内的任意字符
.*匹配前面的任意1个字符,字符可以不存在
.+匹配前面的任意1个字符,字符必须存在
\将后面接着的字符记为一个特殊字符或者一个原意字符或一个向后引用
\n匹配换行符 
\t匹配制表符
\r匹配回车符
\d匹配纯数字
\w 匹配任意字母、数字或下划线
\s匹配任意空白符
{n}表示匹配前面的字符n次
{n,}匹配前面的字符至少n次
{n,m}匹配前面的字符n-m次
|表示或
()表示表达式整体

location和rewrite的区别

  • location 通过前缀或正则匹配用户的URL访问路径做页面跳转、访问控制和代理转发
  • rewrite 对用户的URL访问路径进行重写,再重定向跳转访问重写后的路径http://www.xy101.com/scj.jgp  ->  http://www.xy101.com/error.png

一、location

1.location常用匹配类型

精准匹配、一版匹配、正则匹配

  • location  URL路径       一般前缀匹配
  • location = URL路径      精准匹配
  • location ^~ URL路径     前缀匹配
  • location ~ URL路径      正则匹配,区分大小写
  • location ~* URL路径     正则匹配,不分区大小写
  • location !~ URL路径     正则匹配取反
  • location !~* URL路径    正则匹配取反,不分区大小写

2.location匹配机制

优先级:精准匹配 =  >  最长前缀匹配 ^~  >  正则匹配 ~ ~* !~ !~*  >  一般前缀匹配 /XXXX  >  通用匹配 /

在没有合适的精准匹配的情况下,先看前缀匹配的长度,取最长匹配的location(如果此最长匹配是带有^~的则不再看正则匹配;如果此最长匹配是不带有^~的则会继续再看正则匹配)。

3.实际工作中三大匹配规则

1.网站首页匹配

location = / {
    root 网页根目录;
    index index.html;
}

2.网站静态页面,通过前缀匹配或通用匹配在nginx服务器本地处理

location ~ /static/ {
    root 目录;
}

location / {
    root 目录;
}

3.网站动态页面,通过匹配不同的动态网页文件后缀转发给不同的后端应用服务器处理

location \.php$ {
    fastcgi_pass PHP服务器地址:端口;
}

location \.jsp$ {
    proxy_pass TOMCAT服务器地址:端口;
}
 

二、rewrite

1.rewrite格式

rewrite  正则表达式  重写的地址  [标记位];

标记位说明
last本条规则匹配完成后,不终止重写后的url匹配,一般用在 server 和 if 中
break本条规则匹配完成即终止,终止重写后的url匹配,一般使用在 location 中
permanent返回302临时重定向,浏览器地址会显示跳转后的URL地址
redirect返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

2.rewrite默认情况下只对从域名后面的根目录 / 开始到传递参数的 ? 号前面的URL路径进行重写

#默认只对域名后面的URL部分重写
rewrite 正则表达式 /新URL;    http://域名/旧URL  ->  http://域名/新URL  #如果需要全域名路径重写需要加上协议和域名
rewrite 正则表达式 http://新域名/新URL;       http://旧域名/旧URL  ->  http://新域名/新URL;        http://域名/旧URL  --rewrite重写-->  http://域名/新URL -->  location匹配新URL路径跳转页面rewrite 正则表达式 /新URL  permanent;     #重写后会修改浏览器里的地址栏再重新访问http://域名/旧URL  --rewrite重写-->  http://域名/新URL --> 浏览器地址栏也会改为 http://域名/新URL 再发起一次访问请求 -->  location匹配新URL路径跳转页面location ~ URL路径正则表达式 {rewrite  正则表达式  重写的地址  [标记位];
}$request_uri
if ($uri ~ URL路径正则表达式) {rewrite  正则表达式  重写的地址  [标记位];
}


3. 习题

(1)将请求http://www.xy101.com/abc/123.html 跳转到首页http://www.xy101.com
(2)将请求http://www.xy101.com/abc/test.jpg 跳转到http://www.xy101.com/error.png
(3)将请求http://www.xy102.com/discuz/index.php 跳转到http://www.xy101.com/discuz/index.php ,保证原域名后面的uri路径不变
(4)将请求http://discuz.xy101.com/index.php 的访问跳转到http://www.xy101.com/discuz/index.php ,保证原域名后面的uri路径不变
(5)将对http://www.xy101.com 网站的所有请求跳转到自定义的维护页面或图片,本地可以访问

http://www.lryc.cn/news/370659.html

相关文章:

  • java+vue3+el-tree实现树形结构操作
  • Oracle创建索引的LOGGING | NOLOGGING区别
  • GoogleDeepMind联合发布医学领域大语言模型论文技术讲解
  • Spark安装、解压、配置环境变量、WordCount
  • DeepSeek-V2-Chat多卡推理(不考虑性能)
  • 算法题day42(补5.28日卡:动态规划02)
  • 分治与递归
  • Spring中IOC容器
  • php redis分布式锁
  • kotlin 中的布尔
  • 有哪些ai聊天推荐?简单分享三款
  • Python第二语言(十、Python面向对象(上))
  • SolidWorks 2016 SP5安装教程
  • 为什么高考志愿只选计算机专业?
  • GPT大模型微调-提高垂直领域回答质量
  • 全网首发-Docker被封后的代理设置教程
  • 代码随想录算法训练营第五十七天|1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列
  • RocketMQ事务性消息
  • mysql (事物)
  • kotlin 中的字符串
  • 网站线上模板建设的优缺点
  • 哲学家进餐问题
  • 无人机遥感在农林信息提取中的实现方法与GIS融合应用
  • 联想测开一面(电话面试)笔试60%
  • 【python】tkinter GUI开发: Button和Entry的应用实战探索
  • sm2证书生成(openssl3.0)
  • java计算年化利率
  • 深入理解ChatGPT工作原理
  • 在 Wed 中应用 MyBatis(同时使用MVC架构模式,以及ThreadLocal 事务控制)
  • Elasticsearch index 设置 false,为什么还可以被检索到?