美文网首页
Nginx系列6:rewrite功能配置

Nginx系列6:rewrite功能配置

作者: joyitsai | 来源:发表于2019-04-02 14:44 被阅读0次

1. rewrite介绍

rewrite的主要功能是实现url地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。

重写中用到的指令:
  • if (条件) {} 判断条件,再进行重写
  • set设置变量
  • return 返回状态码
  • break 跳出rewrite
  • rewrite 重写
下面分别详细介绍一下这几条命令的具体用法:
  • if 指令

(1) 语法格式:

if 空格 (条件) {
    重写模式
}

(2) 条件又怎么写? 大概有3种写法:

  • “=”来判断相等, 用于字符串比较
  • “~” 用正则来匹配(此处的正则区分大小写)
    ~* 不区分大小写的正则
  • -f (判断请求的文件是否存在);
    -d (请求的目录是否存在) ;
    -e (文件或目录是否存在) ;
    -x (文件是否可执行)。

例子:

# 如果请求的ip是192.168.1.100,直接返回403
if  ($remote_addr = 192.168.1.100) {
    return 403;
}

# 如果代理中包含MSIE,重定向到it.html
if ($http_user_agent ~ MSIE) {
    rewrite ^.*$ /ie.htm break;   #没有break会循环重定向
}

if (!-e $document_root$fastcgi_script_name) {
    rewrite ^.*$ /404.html break;
} 
#注, 此处还要加break
  • return指令

该指令用于完成对请求的处理,直接向客户端返回响应状态码。处于该指令后的所有nginx配置都将无效。可以在server块和location块以及if块中使用,语法结构有如下几种:

  • return [ text ]

  • return code URL;

  • return URL;
    其中,code为返回给客户端的HTTP状态码;text为返回给客户端的响应体内容,支持变量的使用;URL为返回给客户端的URL地址。

  • break指令

在nginx的同一作用域中,break前的指令配置生效,break后的指令配置无效。nginx配置在遇到break时,将回到上一层作用于继续向下读取配置。

location / {
    if ($slow) {
        set $id $1  #处于break前的配置生效
        break;
        limit_rate 10k;  #处于break后的配置无效
    }
    ...    #处于break指令上一层作用于的其他配置有效
}
  • rewrite指令

rewrite语法格式及参数语法说明如下:
rewrite <regex> <replacement> [flag];关键字 - 正则 - 替代内容 - flag标记

flag标记说明:

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

例子:

rewrite ^/(.*) http://www.czlun.com/$1 permanent;

说明:

  • rewrite为固定关键字,表示开始进行rewrite匹配规则
  • regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址
  • replacement部分是http://www.czlun.com/$1 其中,$1是取自regex部分()里的内容。匹配成功后跳转到的URL。
  • flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.czlun.com/$1 地址上
regex 常用正则表达式说明:

\ 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“$”则匹配“$”

^ 匹配输入字符串的起始位置

$ 匹配输入字符串的结束位置

* 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”

+ 匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o”

? 匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,"?"等效于"{0,1}"

. 匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式。

(pattern) 匹配括号内pattern并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中的匹配内容,要匹配圆括号字符需要\(Content\)

注意:用url重写时, 正则里如果有”{}”,正则要用双引号包起来

相关文章

  • Nginx系列6:rewrite功能配置

    1. rewrite介绍 rewrite的主要功能是实现url地址的重定向。Nginx的rewrite功能需要PC...

  • nginx--rewrite

    URL重写(rewrite)介绍 rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能...

  • nginx下rewrite的使用

    Rewrite配置 rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实...

  • 编译安装配置Nginx

    编译安装Nginx 0、配置安装环境 rewrite模块,需要pcre库 ssl功能,需要openssl库 gzi...

  • nginx常用配置

    nginx配置详解nginx常用正则表达式nginx安装参考nginxlocation和rewrite配置ngin...

  • Linux_261_Nginx之URL重写

    Nginx的URL地址重写功能,主要是使用nginx提供的rewrite功能,且支持正则表达式rewrite能够实...

  • nginx实现url重写

    nginx配置 rewrite实现 try_files实现

  • 2020-03-24 Nginx Rewrite

    1. 什么是Nginx Rewrite 和Apache等Web服务软件一样,Nginx Rewrite的主要功能也...

  • Nginx Rewrite配置

    Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。rewrit...

  • nginx rewrite配置

    admin default

网友评论

      本文标题:Nginx系列6:rewrite功能配置

      本文链接:https://www.haomeiwen.com/subject/wkswbqtx.html