nginx rewrite地址重写

2024-06-13 00:04
文章标签 nginx 重写 地址 rewrite

本文主要是介绍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 网站的所有请求跳转到自定义的维护页面或图片,本地可以访问

这篇关于nginx rewrite地址重写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055715

相关文章

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

一文带你搞懂Nginx中的配置文件

《一文带你搞懂Nginx中的配置文件》Nginx(发音为“engine-x”)是一款高性能的Web服务器、反向代理服务器和负载均衡器,广泛应用于全球各类网站和应用中,下面就跟随小编一起来了解下如何... 目录摘要一、Nginx 配置文件结构概述二、全局配置(Global Configuration)1. w

若依部署Nginx和Tomcat全过程

《若依部署Nginx和Tomcat全过程》文章总结了两种部署方法:Nginx部署和Tomcat部署,Nginx部署包括打包、将dist文件拉到指定目录、配置nginx.conf等步骤,Tomcat部署... 目录Nginx部署后端部署Tomcat部署出现问题:点击刷新404总结Nginx部署第一步:打包

Nginx、Tomcat等项目部署问题以及解决流程

《Nginx、Tomcat等项目部署问题以及解决流程》本文总结了项目部署中常见的four类问题及其解决方法:Nginx未按预期显示结果、端口未开启、日志分析的重要性以及开发环境与生产环境运行结果不一致... 目录前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的

tomcat在nginx中的配置方式

《tomcat在nginx中的配置方式》文章介绍了如何在Linux系统上安装和配置Tomcat,并通过Nginx进行代理,首先,下载并解压Tomcat压缩包,然后启动Tomcat并查看日志,接着,配置... 目录一、下载安装tomcat二、启动tomcat三、配置nginx总结提示:文章写完后,目录可以自动

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

webapp地址

F:\LSP\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文