首页 > 系统相关 >Nginx--rewrite

Nginx--rewrite

时间:2024-02-05 11:04:21浏览次数:33  
标签:http rewrite -- URI 运算符 Nginx location 匹配

rewrite  URL重写,可以在改变网站结构后,无需要求客户端用户修改原有的浏览器书签,也无需其他网站修改对我们网站的友情链接,依赖于PCRE库的支持

 

1 if

语法:          if (condition) { ... }
默认值:    —
上下文:    server, location

如果condition为真,执行定义在大括号中的rewrite模块指令。if指令会从上一层配置中继承配置
condition可以是下列任意一种:
• 变量名: 如果变量值为空或者为“0” 则条件为假;
• 使用“=”和“!=”运算符比较变量和字符串;
• 使用“~”(大小写敏感)和“~*”(大小写不敏感)运算符匹配变量和正则表达式。正则表达式可以包含匹配组,匹配结果后续可以使用变量$1..$9引用。如果正则表达式中包含字符“}”或者“;”,整个表达式应该被包含在单引号或双引号的引用中
• 使用“-f”和“!-f”运算符检查文件是否存在;
• 使用“-d”和“!-d”运算符检查目录是否存在;
• 使用“-e”和“!-e”运算符检查文件、目录或符号链接是否存在;
• 使用“-x”和“!-x”运算符检查可执行文件;
例:
if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 last;
}

if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
    set $id $1;
}

if ($request_method = POST) {
    return 405;
}

if ($slow) {
    limit_rate 10k;
}

if ($invalid_referer) {
    return 403;
}

 

2 rewrite

rewrite指令可以说是rewrite指令集中的核心指令,它通过正则表达式的使用改变URI
可以同时存在一个或者多个指令,按照顺序依次对URL进行匹配和处理

1.先执行server中的rewrite(如果有的话),得到新的URI, 只执行一次(无论修饰符是last还是break);
2.在location中匹配新的URI;
3.执行location中的rewrite(如果有的话), 如果修饰符是last,重写之后得到新的URI, 再在location中匹配新的URI; 如果修饰符是break,重写后得到新的URI,不再进行location匹配
语法: rewrite  regex  replacement  [flag];        
    regex - 用于匹配URI的正则表达式。使用"()"标记要截取的内容
    注意:
        rewrite 接受到的URL不包含HOST地址和参数,因此regex不可能匹配到URI的HOST地址或参数
        如:
        请求的URL为http://myweb.com/source?arg1=value1&arg2=value2 
        此时rewrite指令接受到的URI 是 "/source", 而不包含"myweb.com",也不包含"?arg1=value1&arg2=value2"

    replaement - 匹配成功后用于替换URI 中被截取内容的字符串
    默认情况下,如果该字符串是由"http://" 或"https://" 开头的, 则不会继续对URI 进行处理,而是直接将重写后的URI返回给客户端。
    
    flag - 有break、last、permanent、redirect
        last  - 停止执行当前这一轮的ngx_http_rewrite_module指令集,然后查找匹配改变后URI的新location;
        break - 停止执行当前这一轮的ngx_http_rewrite_module指令集;
        redirect - 返回状态码为302的临时重定向;     
        permanent - 返回状态码为301的永久重定向
   注意:若last一直循环 则在循环十次后返回状态码为500的错误页面
例:
1.如果UA包含"MSIE",rewrite请求到/msid/目录下
    if ($http_user_agent ~ MSIE) {
        rewrite ^(.*)$  /msie/$1  break;
    }
    
2.如果query string中包含"post=140",则永久重定向到example.com
    if ($args ~ post=140) {
        rewrite ^ http://example.com/ permanent;
    }

 



标签:http,rewrite,--,URI,运算符,Nginx,location,匹配
From: https://blog.51cto.com/u_16558404/9601624

相关文章

  • Nginx--引用多配置文件
    在nginx.conf的http模块,include指定某个目录下的*.confusernginx;worker_processesauto;error_log/var/log/nginx/error.log;pid/run/nginx.pid;#Loaddynamicmodules.See/usr/share/nginx/README.dynamic.include/usr/share/nginx/modules/*.conf;events{......
  • Nginx--平滑升级
    在不中断服务的情况下,新的请求也不会丢失,使用新的nginx可执行程序替换旧的 1 查看老版本的编译选项[root@localhost~]#nginx-Vnginxversion:nginx/1.16.0builtbygcc4.8.520150623(RedHat4.8.5-44)(GCC)builtwithOpenSSL1.0.2k-fips26Jan2017TLSSNI......
  • Nginx--upstream健康检查
    nginx判断节点失效状态:Nginx默认判断失败节点状态以connectrefuse和timeout状态为准,不以HTTP错误状态进行判断失败,因为HTTP只要能返回状态说明该节点还可以正常连接,所以nginx判断其还是存活状态;除非添加了proxy_next_upstream指令设置对404、502、503、504、500和timeout......
  • DNS--安装&&配置文件
    1 下载#下载服务yum-yinstallbind#下载解析工具yum-yinstallbind-utils 2 配置文件主配置文件/etc/named.conf区配置文件/var/named/配置文件模板/usr/share/doc/bind-9.8.2/sample 3 协议及端口TCP53主要用于主从同步,需要的是可靠的数......
  • DNS--简介&&解析过程
    1 功能将域名解析为IP地址基本解决IP难于记忆的问题也可以将IP地址解析为域名 2 域名由一连串用点(.)分隔的字符串组成的标识计算机在网络中的电子方位的 3 存储位置linux/etc/hostswindowsC:\WUNDOWS\system32\drivers\etc\hosts 4 全质量域名/完全域名......
  • DNS--解析
    一 正向解析(域名解析成ip)1 修改主配置文件[root@localhost~]#cp-p/etc/named.conf/etc/named.conf.bak[root@localhost~]#vim/etc/named.confoptions{listen-onport53{any;};#默认127.0.0.1,会导致其他人无法访问DNS服务器,需修改allow-qu......
  • DNS--智能地址解析(view视图)
    域名:xinenhui.comDNS服务器:192.168.198.128DNS1:192.168.198.129DNS2:192.168.198.146 1 简介使客户端就近访问DNS服务器来加速用户的访问速度 提高客户端体验不同的客户端使用同一个DNS服务器解析同一个域名得到不同的IP 2 修改主配置文件 设置view[root@localhost~]#vi......
  • DNS--主从
    操作系统:centos7.8DNS-master:192.168.198.128DNS-slave:192.168.198.129 一主从同步过程master修改完成重启后将传送notify给所有slaveslave将查询master的SOA记录master收到请求后将SOA记录发送给slaveslave收到后同时对比查询结果中的serial值,大于将发送zonetransfer......
  • 如何在Python中保留异常装饰器的堆栈跟踪
    异常装饰器是一种通过装饰器(Decorator)机制来捕获和处理函数中异常的技术。当函数中发生异常时,装饰器可以捕获异常并进行处理,也可以记录异常信息或进行其他操作。堆栈跟踪(StackTrace)是指在发生异常时,系统会输出一个包含异常信息和函数调用链的信息。对于经常使用python做爬虫来说,这......
  • 获取请求ip
    publicstaticStringgetUserIp(HttpServletRequestrequest){if(ObjectUtils.isEmpty(request)){returnnull;}//获取客户端前台IP进行解析StringuserIp=request.getHeader("x-forwarded-for");if(userIp==null||userIp.isEmpty......