nginx Rewrite 规则

article/2025/10/21 20:29:30

一:nginx  Rewrite 规则

1rewrite的概念:

     Nginx Rewrite功能是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现URL重写以及重定向功能。Rewrite指令只能放在server {},location {},if {}中,并且只能对域名后边的除去传递的参数外的字符串起作用。

     Nginx的Rewrite规则采用PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)的语法进行规则匹配,如果需要Nginx的Rewrite功能,在编译安装Nginx之前,必须安装PCRE库。

     例如: Rich Products Corporation | Global Food Supplier Serving Foodservice, In-Store Bakery, Retail & Industrial Markets 只对URL中的/a/we/index.php等字符串起作用。

     URL是Uniform Resource Location的缩写,译为“统一资源定位符”

2rewrite的语法:

 rewrite 正则表达式  更换目标 [标志位]

      rewrite和location功能有点像,都能实现跳转。主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对路径做控制访问或反向代理,可以使用proxy_pass代理到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序是:

《1》:执行server块的rewrite指令

《2》:执行location匹配

《3》:执行选定的location中的rewrite指令

注意:如果其中某步URL被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 intelnal Server Error错误。

3:flag标志位

《1》:last:相当于Apache的[L]标记,表示完成rewrite。

《2》:break:本条规则匹配完成后,终止匹配,不再匹配后面的规则

《3》:redirect:返回302临时重定向,浏览器地址栏会显示跳转后的URL地址

《4》:permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

     last一般写在server和if中,而break一般使用在location中

     last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配

     break和last都能组织继续执行后面的rewrite指令

     last和break用来实现URL重写,浏览器地址栏URL地址不变

     redirect和permanent用来实现URL跳转,浏览器地址栏会显示跳转后的URL地址

4:if指令

      语法为if(condition){…},对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行,if条件(condition)可以是如下任何内容:

      当表达式只是一个变量时,如果其值为空或任何以0开头的字符串都会当作条件为false

      直接比较变量和内容时,使用=或!=

《1》:-f和!-f                           用来判断是否存在文件

《2》:-d和!-d                用来判断是否存在目录

《3》:-e和!-e                用来判断是否存在文件或目录

《4》:-x和!-x                用来判断文件是否可执行

例如:http://www.a.com/a/b/test.html

If ($http_user_agent ~ MSIE) {

Rewrite ^(.*)$ /msie/$1 break;

}                        #如果UA包含“MSIE“,rewrite请求到/msie/目录下

If ($request_method = POST) {

Return 405;

}                        #如果提交方法为POST,则返回状态405(Method not allowed)。Return不能返回301,302

注意:因为返回301和302不能只返回状态码,还必须有重定向的URL,所以return指令无法返回301,302

If ($slow) {

Limit_rate 10k;

}                #限速,$slow可以通过set指令设置

If (!-f $request_filename) {

break;

proxy_pass http://127.0.0.1;

}                #如果请求的文件名不存在,则反向代理到location。这里的break也是停止rewrite检查

If ($args ~ post=140) {

rewrite ^ Example Domain permanent;

}                #如果query string中包含“post=140“,永久重定向到example.com

location ~* \.(gif | jpg | swf | flv)$ {

5nginx变量

下面是可以用作if判断的变量

$args:                        记录请求行中的参数,同$query_string

$content_length:            记录请求头中的Content-length字段。

$content_type:                记录请求头中的Content-Type字段。

$document_root:           记录当前请求在root指令中指定的值。

$host :                        记录请求主机头字段,否则为服务器名称。

$http_user_agent:          记录用于记录客户端浏览器的相关信息

$http_cookie:                记录客户端cookie信息

$limit_rate:                           记录可以限制连接速率。

$request_method:          记录客户端请求的动作,通常为GET或POST。

$request_filename:         记录当前请求的文件路径,由root或alias指令与URI请求生成。

$scheme :                        记录HTTP方法(如http,https)。

$server_protocol:            记录请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

$server_addr:                记录服务器地址,在完成一次系统调用后可以确定这个值。

$server_name:                记录服务器名称。

$server_port:                记录请求到达服务器的端口号。

$request_uri:                记录包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。

$uri:                                记录不带请求参数的当前URI,$uri不包含主机名,如”http://www.a.com/foo/bar.php”。

$document_uri:        与$uri相同。

$http_x_forwarded_for        记录远程客户端的ip地址

$remote_addr:                记录远程客户端的IP地址。

$remote_port:                记录远程客户端的端口。

$remote_user                           记录远程客户端用户名称

$time_local                        记录访问时间及时区

$request                         记录请求的URL与HTTP协议

$status                           记录请求的状态,例如成功时为200,页面找不到时为404

$body_byte_sent                记录发送给客户端的文件主体内容大小

$http_referer                        记录是从哪个页面链接访问过来的

安装nginx

《1》:rz  上传软件包

《2》: tar xf nginx-1.18.0.tar.gz -C /usr/src/  解压

《3》:cd /usr/src/nginx-1.18.0/  切换目录

《4》:yum -y install pcre-devel zlib-devel openssl-devel  安装依赖包

《5》:useradd -M -s /sbin/nologin nginx  创建用户

《6》 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-stream  编译安装

《7》:make && make  install  编译安装

《8》:ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/  创建链接

《9》:nginx -t  检查语法

实现域名跳转

    《1》:编辑本机的hosts文件C:\Windows\System32\drives\etc\hosts

    《2》:编辑的内容:

192.168.100.10 www.jd.com

192.168.100.10 www.360buy.com

《3》:vim /etc/hosts  编辑hosts文件

《4》:写入

192.168.100.10 www.jd.com

192.168.100.10 www.360buy.com

《5》:cd /usr/local/nginx/conf 切换目录

《6》:cp nginx.conf  nginx.conf.bak  拷贝

《7》:vim nginx.conf  编辑文件

《8》:修改

    server {

        listen       80;

        server_name  www.jd.com;

        charset utf-8;

        root   html;

        index  index.html index.htm;

        if ($host = "www.360buy.com") {

        rewrite ^(.*)$ ! permanent;

        }

《9》:nginx  启动服务

《10》:netstat -lnpt |grep 80  查看端口

《11》:访问 www.360buy.com (注:他访问的是 www.360buy.com 跳转到 www.jd.com。)


http://chatgpt.dhexx.cn/article/RcJHniXt.shtml

相关文章

Nginx高级之Rewrite规则

进阶阶段的回顾: Nginx进阶之静态Web资源服务 Nginx进阶之代理服务 Nginx进阶之负载均衡服务 Nginx进阶之缓存服务和动静分离 作用及应用场景 作用: 实现对URL的重写以及对匹配(正则表达式)的url的重定向 场景: 1. URL访问跳转, 支持开发设计 ① 页面跳转 ② 兼容…

Nginx配置请求转发location及rewrite规则

location / {# 精确匹配 / ,主机名后面不能带任何字符串[ configuration A ] }location / {# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求# 但是正则和最长字符串会优先匹配[ configuration B ] }location /documents/ {# 匹配任何以 …

Rewrite规则简介

Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块&…

rewrite详解

rewrite模块 URI跟URL介绍 什么是uri?统一标识符,拿www.abc.com/aw/wd/举例,那么rui就是/aw/wd/这部分数据(也有可能是图片,html网页,如果是伪静态的话,那就得看配置是啥玩意了 什么是url? 统一定位符&#xff…

Nginx基础——Rewrite规则

点击上方“芋道源码”,选择“置顶公众号” 技术文章第一时间送达! 源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69 篇,预计总共 75 篇 )中文详细注释的开源项目Java 并发源码合集RocketMQ 源码合集Sharding-JDBC 源码解析合集Spring …

F280049C Crossbar X-BAR

文章目录 X-BAR9.1 输入X-BAR9.2 ePWM、CLB和GPIO输出X-BAR9.2.1 ePWM X-BAR9.2.1.1 ePWM X-BAR架构 9.2.2 CLB X-BAR9.2.2.1 CLB X-BAR架构 9.2.3 GPIO输出X-BAR9.2.3.1 GPIO输出X-BAR架构9.2.4 X-BAR标志 总结 X-BAR 交叉开关(在本章中称为X-BAR)提供…

BCGControlBar Pro 31.2 正式版-Key

什么是 MFC 的 BCGControlBar Pro? BCGControlBar(“Business Components Gallery ControlBar”)是一个 MFC 扩展库,企鹅180846090允许您创建具有完全自定义选项(功能区、可自定义工具栏、菜单等)和一组丰富…

BCGControlBar Library for .NET 7.1.1 Crack

什么是 BCGControlBar Library for .NET? BCGControlBar Library for .NET 是 100% 托管代码工具包,用 C/CLI 编写,面向 Microsoft .NET Framework 2.0 或更高版本。该库包含许多高度可定制、完全可设计的组件,使您能够创建最复杂…

BCGControlBar v12的向导使用图解

BCGControlBar专业版是MFC的一个扩展库,您可以用来构建类似于Microsoft Office 2000/XP/2003/2007/2010、Microsoft Visual Studio(打印、用户定制工具栏、菜单等)和其他一些知名产品的高级用户界面。 首先从网上下载BCGControlBar v12资源 &…

MFC界面控件BCGControlBar v33.4 - 日历、属性网格组件升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了,该版本包含了对Windows 11 Mica materi…

BCG学习(一)——BCGControlBar安装与配置

最近工作中需要用到BCG相关的知识,趁着全民防疫、居家隔离这段时间正好学习一下,作此笔记,记录学习过程和心得体会。话不多说,开整! 简介 下载、安装与配置 例程编译与运行 简介 BCG是MFC的一个扩展库,可以…

MFC扩展库BCGControlBar Pro v33.5新版亮点 - 控件、脚本管理增强

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.5已正式发布了,此版本包含了Ribbon(功能区)自定义…

MFC界面控件BCGControlBar v33.4 - 支持Win 11 Mica material主题

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了,该版本包含了对Windows 11 Mica materi…

MFC界面控件BCGControlBar v33.4 - 各子控件全面升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.4已正式发布了,该版本包含了对Windows 11 Mica materi…

MFC界面控件BCGControlBar v33.3 - 升级Ribbon Bar自定义功能

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 该版本包含了增强的Ribbon自定义、新的日期/时间数字指示器、带有文本对齐的组控件、多行支持以及其他一些新功…

MFC界面控件BCGControlBar v33.3 - 可视化管理器和主题更新

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.3已正式发布了,该版本包含了增强的Ribbon自定义、新的…

BCGControlBar使用说明

BCGControlBar使用说明 1.BCGControlBar简介1.1 概述1.2 开发环境1.3 安装 1.BCGControlBar简介 1.1 概述 BCG是MFC的一个扩展库,可以用来构建类似于Microsoft Office 2003/2007/2010/2013/2016 和 Microsoft Visual Studio-like(打印、用户定制工具栏、…

【MySQL】物化视图

物化视图是相对于视图而言的,但是两者实际上并没有什么关系就如java/javaScript一样 首先mysql的视图不是一种物化视图,他相当于一个虚拟表,本身并不存储数据,当sql在操作视图时所有数据都是从其他表中查询出来的。者带来的问题是…

Oracle——物化视图

文章目录 含义物化视图的语法物化视图的创建1、自动刷新的物化视图 ON COMMIT2、非自动刷新的物化视图 ON demand 关于手动刷新物化视图的删除资料参考 含义 什么是物化视图? 物化视图,通俗点说就是物理化的视图。 什么叫物理化? 将视图以表…

PostgreSQL视图和物化视图

由于每天工作忙碌,好久没更新了,今天更新一下,讲一讲视图和物化视图的概念以及区别吧。 1. 视图 1.1 PostgreSQL视图概述 PostgreSQL中的视图和MySQL中的视图是一样的,在查询的时候进行扫描基础表的操作。 视图表示基础表对应的…