Nginx (五)——Rewrite 语法介绍

一、rewrite模块介绍(Nginx_http_rewrite_module)

nginx通过ngx_http_rewriet_module模块支持url重写、支持if条件判断,但不支持else。另外该模块需要PCRE支持,应该在编译nginx时指定PCRE支持。根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可执行10次,超过后Nginx将返回500错误。同时,重写模块包含set指令,来创建新的变量并设其值,这在有些情景下是有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。学习rewrite之前要对正则表达式很熟悉,以下列出一些常用的正则表达式元字符:

.  :匹配除换行符以外的任意字符。

?:重复0次或1次

+ :重复1次或更多次

*  :重复0次或更多次

\d:匹配数字

^ :   匹配字符串的开始字符

$ : 匹配字符串的结束字符

{n}:重复n次

{n,}:重复n次或更多次

[c] :匹配单个字符c

[a-z]:匹配a-z小写字母的任意一个

二、rewrite 重写中用到的指令

if(条件){}  设定条件,再进行重写

set# 设置变量

return # 返回状态码

break # 跳出rewrite

rewrite # 重写

三、指令介绍及实验测试

1.  if 语法格式

if 空格 (条件){

重写模式

}

条件怎么写?

答:3种写法

1:“=”来判断相等,用于字符串比较

2: “~”用正则来匹配(此处的正则区分大小写)

“~*”不区分大小写的正则

3:   -f -d -e  来判断是否为文件,为目录,是否存在

例子1:使用if 语句,禁止IP地址访问

location / {

if ($remote_addr = 192.168.40.1) {

return 403;

}

if ($http_user_agent ~ rv:11.0) {

rewrite ^.*$ /ie.html;

break;      #(不break会循环重定向)

}

if (!-e $document_root$fastcgi_script_name) {

rewrite ^.*s /404.html break;

}

注:此处还要加break,

以xx.com/dsafsd.html这个不存在的页面为例,

因为我们观察访问日志,日志中显示的访问路径,依然是GET/dsafsd.html HTP/1.1

提示:服务器内部的rewrite和302跳转不一样。

跳转的话URL都变了,变成了重新http请求404.html,而内部rewrite,上下文没变,

就是说 fastcgi_script_name 仍然是dsafsd.html,因此,会循环重定向。

四、set用法

set是设置变量用的,可以用来达到多条件判断时作标志用。

达到Apache下的rewrite_condition的效果。

如果:判断IE并重写,且不用break:

if ($http_user_agent ~* rv:11.0) {

set $isie 1;

}

if ($fastcgi_script_name = ie.html) {

set $isie 0;

}

if ($isie = 1) {

rewrite ^.*$ ie.html;

}

原文地址:http://blog.51cto.com/5001660/2130506

时间: 2024-10-07 17:32:58

Nginx (五)——Rewrite 语法介绍的相关文章

Nginx配置rewrite过程介绍

创建rewrite语句 vi conf/vhost/www.abc.com.conf #vi编辑虚拟主机配置文件 文件内容 server { listen 80; server_name abc.com; rewrite ^/(.*) http://www.abc.com/$1 permanent; } server { listen 80; server_name www.abc.com; location / { root /data/www/www; index index.html in

Nginx教程(四) Location配置与ReWrite语法

1 Location语法规则 1.1 Location规则 语法规则: location [=|~|~*|^~] /uri/ {- } 首先匹配 =,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 /通用匹配.当有匹配成功时候,停止匹配,按当前匹配规则处理请求. 符号 含义 = = 开头表示精确匹配 ^~ ^~开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(

Nginx的Rewrite设置及示例

下面我介绍一下Nginx的Rewrite模块设置及Wordpress和Discuz的示例.Nginx的Rewrite规则比Apache的简单灵活多了,从下面介绍可见一斑. 首先,Nginx可以用if进行条件匹配,语法规则类似C,举例如下: if ($http_user_agent ~ MSIE) {rewrite  ^(.*)$  /msie/$1  break;}1.正则表达式匹配,其中: ~  为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配

Nginx 实现 Rewrite 跳转

文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 上一篇文章对Nginx的Location配置进行了讲解,本篇主要对于Nginx中的Rewrite跳转进行讲解.因为目前很多工作前端开发都会选择使用Nginx作为反向代理服务器,但是平时业务需要难免碰到重写URL,Nginx的Rewrite跳转有什么使用场景呢? 公司更换域名需要访问旧域名时跳转到新域名 请求静态文件跳转到CDN 根据用户设备不同跳转到不同站点(pc端,移动端) 不得不说的是Apache服务器

nginx之rewrite相关功能

Nginx Rewrite相关功能 Nginx服务器利用ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE库,nginx的正则表达式底层依赖于PCRE库,PCRE是用perl语言写的:rewrite是nginx服务器的重要功能之一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也

Linux下Nginx服务Rewrite和Proxy_Pass

摘自:https://www.jianshu.com/p/10ecc107b5ee Nginx_Rewrite 一.介绍 Rewrite根据nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写和者重定向. Rewrite和location类似,都可以实现跳转,区别是rewrite是在同一域名内更改url,而location是对同类型匹配路径做控制访问,或者proxy_pass代理到其他服务器. Rewrite和location执行顺序: 执行server下的rewrit

Nginx中 Rewrite学习笔记

路由重写是Web服务器中的一个很重要的基本功能.通过路由重写,可以结构化URL,更具语义化(对SEO有益).另外,分享出去的URL可能会因程序路由变动而导致URL失效,而路由的重写可以很好的解决这类问题. 适当的使用Rewrite功能,可以更我们带来很多的好处.Nginx中Rewrite的功能是基于perl语言兼容的正则表达式,所以在编译安装nginx之前,需要安装PREC库.Nginx中Rewrite功能实现是基于ngx_http_rewrite_module,所以确保安装了此模块. Rewr

Nginx的Rewrite规则与实例

通过Rewrite规则可以实现规范的URL.根据变量来做URL转向及选择配置,用好Rewrite有时起到事半功倍的效果. 语法 Nginx的Rewrite相比Apache的要好理解很多,主要使用指令有if.rewrite.set.return.break等,其中rewrite是最关键的指令. rewrite 语法: rewrite regex replacement [flag]; 默认值: — 上下文: server, location, if 如果指定的正则表达式能匹配URI,此URI将被r

nginx重定向规则详细介绍

为何要使用301重定向 在网站建设中需要网页重定向的情况很多:如网页目录结构变动,网页重命名.网页的扩展名改变.网站域名改变等.如果不做重定向,用户的收藏和搜索引擎数据库中的旧地址只能让访客得到一个404错误信息页面,访问流量白白丧失.不仅如此,之前该页面的一切积累(比如PR值)就都白费了. 301重定向不仅能使页面实现自动跳转,对于搜索引擎来说,也可能可以传递PR值. nginx重定向规则详细介绍 http://www.jefflei.com/post/1015.html rewrite命令n