nginx location和rewrite配置语法

news/2024/6/17 1:49:54 标签: nginx, 运维

nginx location和rewrite正则匹配表达式

文章目录

    • 1、nginx支持的正则表达式
      • 1.1、支持的正则表达
      • 1.2、常用匹配修饰符
    • 2、location配置示例和优先级
    • 3、rewrite
      • 3.1、rewrite使用语法
      • 3.2、rewrite常用判断表达式
      • 3.3、rewrite示例

nginx_2">1、nginx支持的正则表达式

1.1、支持的正则表达

^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置
* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
\d :匹配纯数字
{n} :重复 n 次
{n,} :重复 n 次或更多次
{n,m} :重复 n 到 m 次
[] :定义匹配的字符范围
[c] :匹配单个字符 c
[a-z] :匹配 a-z 小写字母的任意一个
[a-zA-Z0-9] :匹配所有大小写字母或数字
() :表达式的开始和结束位置
| :或运算符

1.2、常用匹配修饰符

匹配规则

= :精确匹配。
^~ :普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它location。
~ :区分大小写的正则匹配。
~* :不区分大小写的正则匹配。
!~ :与指定正则匹配相反(区分大小写)。
!~* :与指定正则匹配相反(不区分大小写)。

2、location配置示例和优先级

# 1、精准匹配 =
location = / {}  #只匹配/,不匹配/abc。
location = /test {}  #只匹配/test,不匹配/test1。

# 2、前缀匹配 ^~
location ^~ /test/ {} #匹配任何以/test/开头的地址,如果匹配成功,不再匹配其它规则。

# 3、正则匹配 ~、~*、!~、!~*
location ~ .*\.(js|css)?$ #匹配所有js和css
location ~ /\. {deny all;} #不显示目录文件

# 4、不带任何修饰符的匹配
location /test4/abc {}  #如果匹配,还会检查1、2、3规则是否优先匹配

# 5、/ 通用匹配
location / {}     # 如果上边1,2,3,4规则都不符合,最后都由/匹配

3、rewrite

3.1、rewrite使用语法

1、地址跳转,用户访问www.test.com,将其定向至一个新的域名www.abc.com
2、协议跳转,将http的请求协议重新跳转至https协议(实现https主要手段)。
3、URL伪静态,将动态URL地址显示为伪静态URL。

rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用

##rewrite语法
rewrite <regex> <replacement> <flag>;

#regex:表示正则匹配规则
#replacement:表示跳转后的内容
#flag:表示rewrite支持的flag标记:

flag标记:

last #本条规则匹配完成后,继续向下匹配新的location URI规则,一般用在 server 和 if 中。
break #本条规则匹配完成即终止,不再匹配后面的任何规则,一般使用在 location 中。
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址。
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

3.2、rewrite常用判断表达式

#表达式
-f!-f #用来判断是否存在文件
-d!-d #用来判断是否存在目录
-e!-e #用来判断是否存在文件或目录
-x!-x #用来判断文件是否可执行

#全局变量
$args           #这个变量等于请求行中的参数。
$content_length # 请求头中的Content-length字段。
$content_type   # 请求头中的Content-Type字段。
$document_root  # 当前请求在root指令中指定的值。
$host           # 请求主机头字段,否则为服务器名称。
$http_user_agent # 客户端agent信息
$http_cookie    # 客户端cookie信息
$limit_rate     # 这个变量可以限制连接速率。
$request_body_file # 客户端请求主体信息的临时文件名。
$request_method  # 客户端请求的动作,通常为GET或POST。
$remote_addr    # 客户端的IP地址。
$remote_port    # 客户端的端口。
$remote_user    # 已经经过Auth Basic Module验证的用户名。
$request_filename # 当前请求的文件路径,由root或alias指令与URI请求生成。
$query_string   # 与$args相同。
$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不包含主机名,如”/foo/bar.html”。
$document_uri   # 与$uri相同。

# 例子:http://www.test.com/penngo/index.php
$host        #www.test.com
$server_port #80
$request_uri #http://www.test.com/penngo/index.php
$document_uri #/penngo/index.php
$document_root #/homw/www/root
$request_filename #/homw/www/root/penngo/index.php

3.3、rewrite示例

server {
	listen       80;
	server_name  www.test.com;		#域名修改	
	
	
    set $rewrite false;   
    # 1、设置是否合法的IP标记,设置变量$rewrite,变量值为boole值true
    #当客户端IP为192.168.28.128时,将变量值设为false,不进行重写
    if ($remote_addr = "192.168.28.128") {
       set $rewrite true;
    }
    if ($rewrite = true) {     #当变量值为true时,进行重写
       rewrite (.+) /update.html;
    }

    # 2、$request_uri 内置变量
    # http://www.test.com/100.html转到http://www.test.com/100
    if ($request_uri ~ ^/(\d+).html$) {
      rewrite /(\d+)- http://www.test.com/$1 permanent;
    }
    
    # 3、基于php跳转
    location ~* /upload/.*\.php$ {
        rewrite (.+) http://www.test.com permanent;
    }
    
    # 4、添加域名重定向,增加目录
	location /test {
        ##http://www.test.com/test/index.html转到http://www.abc.com/penngo/test/index.html
		rewrite ^/(.*)$ http://www.abc.com/penngo/$1 permanent;
    }
    # 5、添加域名重定向
	location / {
        if ($host = 'www.test.com'){			
          #$1为正则匹配的内容,即域名后边的字符串
          #http://www.test.com转到http://www.abc.com
		  rewrite ^/(.*)$ http://www.abc.com/$1 permanent;
        }
        root   html;
        index  index.html index.htm;
    }

}

http://www.niftyadmin.cn/n/66956.html

相关文章

[CVPR‘22] EG3D: Efficient Geometry-aware 3D Generative Adversarial Networks

paper: https://nvlabs.github.io/eg3d/media/eg3d.pdfproject: EG3D: Efficient Geometry-aware 3D GANscode: GitHub - NVlabs/eg3d总结&#xff1a; 本文提出一种hybrid explicit-implicit 3D representation: tri-plane hybrid 3D representation&#xff0c;该方法不仅有…

yaml配置文件

最近在写代码&#xff0c;发现随着网络的增加&#xff0c;代码变得越来越冗余&#xff0c;所以就想着写一个网络的配置文件&#xff0c;把网络的配置放到一个文件中&#xff0c;而不再主函数中&#xff0c;这样代码开起来就好看了&#xff0c;调试的时候也方便了。之前写过一篇…

Bigscreen Beyond头显解析:极致轻量化,显示部分仅127g

近年来&#xff0c;一体机占据了C端VR市场主要地位&#xff0c;其采用低成本、低门槛、无线化设计&#xff0c;对消费者足够友好。尽管如此&#xff0c;PC VR生态也在发展&#xff0c;相比于一体机&#xff0c;PC VR可提供视觉质量更高的VR体验&#xff0c;而且依托于SteamVR生…

Fluent Python 笔记 第 13 章 正确重载运算符

运算符重载的作用是让用户定义的对象使用中缀运算符(如 和 |)或一元运算符(如 - 和 ~)。说得宽泛一些&#xff0c;在 Python 中&#xff0c;函数调用(())、属性访问(.)和元素访问 / 切片 ([])也是运算符&#xff0c;不过本章只讨论一元运算符和中缀运算符。 13.1 运算符重载基…

软件测试1-测试就是找茬游戏

软件测试是找茬游戏以前有一个很火的游戏叫《大家来找茬》&#xff0c;我玩这个游戏很厉害&#xff0c;在这个游戏中&#xff0c;两幅图中有几个不一样的地方&#xff0c;有些地方很明显&#xff0c;一眼就能看到&#xff0c;有的地方隐藏得比较深&#xff0c;要仔细看才能看清…

牛客专访ChatGPT:2023校园招聘如何做?附校招趋势

春招在即&#xff0c;牛客作为新一代数智化校园招聘引领者&#xff0c;为大家采访了当下“顶流ChatGPT”&#xff0c;关于近几年校园招聘的变化及2023企业做校招的建议。以下&#xff0c;为“ChatGPT专访”实录。01. ChatGPT眼中近3年校园招聘的变化牛客&#xff1a;很高兴作为…

从零开始学习构建系统之cmake(二)

概述 一个基于cmake的构造系统是通过一系列逻辑上的target组织起来的&#xff0c;一个target对应于一个可执行文件或者库&#xff0c;或者是一个自定义的一个target&#xff0c;其包含了一些自定义的命令&#xff0c;target之间的依赖关系决定了构建的顺序以及对于修改的重新生…

分布式事务解决方案——TCC

TCC是Try、Confirm、Cancel三个词语的缩写&#xff0c;TCC要求每个分支事务实现三个操作&#xff1a;预处理Try、确认Confirm、撤销Cancel。1、Try 阶段是做业务检查(一致性)及资源预留(隔离)&#xff0c;此阶段仅是一个初步操作&#xff0c;它和后续的Confirm一起才能真正构成…