`

Nginx的Rewrite规则

 
阅读更多
=======================================
什么是Nginx的Rewrite规则
    Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE,Perl兼容正则表达式的语法进行规则匹配。



=======================================
Nginx Rewrite 规则相关指令

break指令
语法:break
默认值:none
作用域: server,location,if



if指令
语法:if(condition){....}
默认值:none
作用域: server,location

缺点:
   1)不支持嵌套
   2)不支持多个条件&& ,||处理
   3) “~“表示区分大小写字母的匹配,”~*”表示不区分大小写字母匹配
   4)"!~","!~*"与"~","~*"意义相反
   5)"-f","!-f"表示文件是否存在
   6)“-d”和"!-d"表示目录是否存在
   7)“-e”和"!-e"表示目录或文件是是否存在
   8)“-x”和"!-x"表示文件是否可执行

部分正则表达式可以在圆括号()内,其值可以通过后面的变量$1至$9访问
rewrite ^(.*)  /msie/$1  break;

return 指令
语法: return code
默认值: none
作用域: server,location,if
 
  结束规则的执行并返回状态码给客户端. 状态码:204,400,402~406,410,411,413,及500~504

rewrite 指令
语法: rewrite regex replacement flag
默认值:none
作用域: server ,location ,if

if($host ~* www\.(.*))
{
    set $host_without_www $1;
    rewrite ^(.*)$  http://$host_without_www$1 permanent;
}

flag标记的参数值:
last-完成rewrite。(本条rewrite规则执行完毕后,会对其所在的server{...}标签重新发起请求)
break-本条规则匹配完成后,终止匹配,不再匹配后面的规则。(本条规则匹配完成后,终止匹配,不再匹配后面的规则)
redirect-返回302临时重定向,浏览器地址栏会显示跳转后的URL地址。
permanent-返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

URL是带参数的,默认情况下,会自动添加上。如果不想加参数,请在替换的字符串上加上?
带参数
    rewrite ^/test(.*)$ http://www.yourdomain.com/home permanent;
    重定向前
       http://www.yourdomain.com/test?id=5
    重定向后
       http://www.yourdomain.com/home?id=5


不带参数
    rewrite ^/test(.*)$ http://www.yourdomain.com/home? permanent;
    重定向前
       http://www.yourdomain.com/test?id=5
    重定向后
       http://www.yourdomain.com/home





注:对花括号({})来说,它们既能用在重定向的正则表达式里,也能用在配置文件里分割代码块,为了避免冲突,正则表达式里如果带花括号,应该用双引号包围。

  /photos/123456
  重定向到
  /photos/12/34/56/123456.png
  rewrite "/photos/([0-9]{2})([0-9]{2})([0-9]{2})"
          /photos/$1/$2/$3/$1$2$3.png

set指令
语法:  set variable value
默认值  none
作用域  server,location,if
set $varname 'value';


======================
Nginx  Rewrite用到的全局变量
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri

====================================================
防盗链
   location ~* \.(gif|jpg|png|swf|flv)$
   {
           valid_referers none blocked www.yourdomain.com *.yourdomain.com;
            if($invalid_referer)
            {
                rewrite ^/(.*) http://www.yourdomain.com/blocked.html;
            }
   }

有关Referer的解释:

当一个请求头的Referer字段中包含一些非正确的字段,这个模块可以禁止这个请求访问站点。
这个头可以随意的伪造,因此,使用这个模块并不能100%的阻止这些请求,绝大多数拒绝的请求来自一些典型的浏览器,
可以认为这些典型的浏览器并不能提供一个”Referer”头,甚至是那些正确的请求。

指令:valid_referers

语法:valid_referers [none|blocked|server_names] …
默认值:none
使用字段:server, location
这个指令在referer头的基础上为 $invalid_referer 变量赋值,其值为0或1。
可以使用这个指令来实现防盗链功能,如果valid_referers列表中没有Referer头的值, $invalid_referer将被设置为1(

参照前例)。
参数可以使如下形式:

none意为不存在的Referer头
blocked意为根据防火墙伪装Referer头,如:“Referer: XXXXXXX”。
server_names为一个或多个服务器的列表,0.5.33版本以后可以在名称中使用“*”通配符
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri





























分享到:
评论

相关推荐

    nginx rewrite规则

    Nginx与Apache的Rewrite规则对比** Apache的`mod_rewrite`基于Perl兼容正则表达式(Perl Compatible Regular Expressions, PCRE)进行URL重写,通常在`.htaccess`文件中配置。而Nginx的`rewrite`规则则直接在服务器...

    nginx rewrite规则怎么配置-.docx

    **Nginx Rewrite规则配置详解** 在Web服务器优化和URL管理中,Nginx的Rewrite规则扮演着重要角色。它允许我们根据特定条件重写请求的URL,从而实现动态URL到静态URL的转换、URL规范化、路径重定向等。Nginx的...

    Nginx的Rewrite规则与实例

    ### Nginx的Rewrite规则与实例:深入解析与应用 在现代Web服务器管理与运维领域,Nginx因其高效、稳定以及丰富的功能而备受推崇。其中,Rewrite模块是Nginx的一项重要特性,它允许管理员对HTTP请求进行重写、重定向...

    实例讲解nginx的rewrite规则

    ### 实例讲解Nginx的rewrite规则 #### 正则表达式匹配 在Nginx中,使用`rewrite`指令可以实现对URL的重写,其中涉及到正则表达式的匹配方式有以下几种: 1. **区分大小写的匹配**:使用`~`符号,例如:`rewrite ^/...

    nginx设置rewrite规则

    下面将详细介绍如何在LNMP环境中配置Nginx的rewrite规则。 首先,了解rewrite规则的基本概念。Nginx的rewrite模块允许我们根据特定的条件重写请求的URI,这在实现URL路由、隐藏真实路径、SEO优化等方面非常有用。它...

    nginx rewrite重写规则与防盗链配置方法教程详解

    导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标记的几种形式,盗链时返回403错误,允许的域名直接跟在第二行的域名后面。 nginx rewrite重写规则与防盗链配置方法如下所示: nginx rewite...

    Nginx Rewrite规则与使用介绍和技巧实例

    Nginx的rewrite规则编写实例展示了在不同情况下如何应用rewrite规则来满足特定的业务需求: 1. 当访问的文件或目录不存在时,可以重定向到指定的PHP文件,以避免返回404错误页面。 2. 通过正则表达式可以对请求的...

    Nginx关于Rewrite执行顺序详解.docx

    如果一个URL被重写后再次匹配到同一个location块,且这个location块还有Rewrite规则,那么Nginx会在达到设置的最大循环次数(默认为10)时停止重写,并返回500 Internal Server Error错误。 四、使用技巧与注意事项...

    nginx中带问号(?) 带参数的rewrite规则

    以下将详细介绍如何在Nginx中处理带参数的`rewrite`规则,以及如何去除或保留这些参数。 首先,`$query_string`变量包含了GET请求中的所有参数,而`$request_uri`则包含了原始URI,包括路径和查询字符串,但不包含...

    nginx之rewrite

    rewrite规则在nginx的配置文件中定义,通常在server、location和if指令块中使用。 一、Nginx rewrite规则定义 rewrite规则通过正则表达式匹配请求的URI,并且可以结合标志位来实现URL重写或重定向。使用全局变量...

    nginx面试题.txt(内容较少,酌情下载)

    根据提供的文件信息,我们可以整理出以下关于 Nginx rewrite 规则的相关知识点: ### Nginx Rewrite 模块概述 Nginx 的 Rewrite 模块主要用于实现 URL 的重写和重定向功能,这对于网站的 SEO 和用户体验都有很大的...

    nginx配置location总结及rewrite规则写法

    nginx配置location总结及rewrite规则写法

    浅谈apache和nginx的rewrite的区别

    1. Nginx Rewrite规则相关指令 Nginx Rewrite规则相关指令有if、rewrite、set、return、break等,其中rewrite是最关键的指令。一个简单的Nginx Rewrite规则语法如下: rewrite ^/b/(.*)\.html /play.php?video=$1 ...

    详解nginx rewrite和根据url参数location

    **Nginx Rewrite 规则详解** `Nginx` 的 `rewrite` 模块用于重写请求的 URI,这在处理动态路由、URL美化、重定向等方面非常有用。`rewrite` 规则通常在 `location` 块内定义,以针对特定的 URL 路径执行。 1. **...

    AMH-Rewrite规则

    其中,“AMH-Rewrite 规则”主要指的是 AMH 集成的 Nginx 服务器中关于 URL 重写规则的配置和应用。 URL 重写是 web 服务器处理请求的一种技术,常用于优化网站 URL 结构,隐藏真实路径,提高搜索引擎优化(SEO)...

    Nginx高性能WEB服务器视频.rar

    l0 Nginx Rewrite规则详解一.rar 11构建Nginx均衡LAMP高性能服务器,rar 12 Nginx日志分析及脚本编写.rar 13 Nginx日志切割案例讲解.rar 14 Nginx均衡TCP协议服务器案例.rar 15 Nginx防盗链配置案例置.rar, 16 Nginx...

    nginx Rewrite语法详解.zip

    rewrite规则 常用的命令 if (条件) {} 设定条件,再进行重写 set #设置变量 return #返回状态码 break #跳出rewrite rewrite #重写 Nginx入门到实践-中间件服务、应用层负载均衡、应用层安全防护、动静分离等

    实战Nginx.取代Apache的高性能Web服务器

    7.5 Nginx与Apache的Rewrite规则实例对比 第8章 Nginx模块开发 8.1 Nginx模块概述 8.2 Nginx模块编写实践 第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块 9.1 什么是Web缓存? 9.2 Nginx的Web缓存服务 ...

Global site tag (gtag.js) - Google Analytics