nginx中的rewrite语句

rewrite命令使用正则表达式来匹配请求URI,被匹配到的URI将会被重写,可以实现内部URL重写或URL重定向。rewrite命令可以出现在server、location、if语句块中。多个rewrite语句按照它们在配置文件中出现的位置从上往下顺序执行,匹配到某一条rewrite语句后是否会继续向下执行或后续如何处理,由那条语句决定。

命令语法格式:


rewrite  正则表达式  新URI  [flag];

  • "正则表达式"用于匹配"请求URI",匹配到的URI将会被替换成"新URI"。
  • "新URI"可以是单纯的URI,也可以是一个完整的URL地址:
    • 当"新URI"是单纯的URI时,称作内部URL重写。此时本条rewrite语句会按照规则将请求URL重写成新的URL,但重写完成后的行为则受 [flag] 选项控制。
    • 当"新URI"是一个完整的URL地址,即以"http://"、"https://"或"$scheme"开头的地址时,称作URL重定向。此时本条rewrite规则重写完成后,服务端不再进行进一步处理,它会立刻将得到的新URL返回给客户端(301、302等重定向的形式),服务端处理完成,客户端则会重新发起对新URL的请求。
  • [flag] 选项用于调控重写的行为,它的取值可能是:
    • last:重写完成后,会停止继续处理当前区块所有属于ngx_http_rewrite_module模块的语句(即不会继续匹配当前区块余下的rewrite语句或其它属于该模块的语句)。重写得到的新URL会重新匹配所有location语句,以进行进一步处理。
    • break:重写完成后,会停止继续处理当前区块所有属于ngx_http_rewrite_module模块的语句(即不会继续匹配当前区块余下的rewrite语句或其它属于该模块的语句),就像break命令一样,不会有进一步的动作。
    • redirect:重写完成后,返回带有302代码(临时重定向)的新URL给客户端,服务端处理完成。该flag只有在"新URI"不是完整的URL地址时才会生效。
    • permanent:重写完成后,返回带有301代码(永久重定向)的新URL给客户端,服务端处理完成。

示例:

先在网页根目录下创建一些目录和文件用于后续测试。


[[email protected] ~]# mkdir -p /usr/local/nginx/html/dir/subdir1

[[email protected] ~]# mkdir -p /usr/local/nginx/html/dir/subdir2

[[email protected] ~]# echo 'subdir1 testfile.html' > /usr/local/nginx/html/dir/subdir1/testfile.html

[[email protected] ~]# echo 'subdir2 testfile.html' > /usr/local/nginx/html/dir/subdir2/testfile.html

修改nginx配置文件,定义rewrite规则,可以在server语句块中定义。


[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf

server {

rewrite  ^/dir/(.*)/.*$  /dir/$1/testfile.html  break;

}

上面rewrite规则的含义是:若请求URI符合^/dir/(.*)/.*$,则将其重写为/dir/$1/testfile.html。$1是引用请求URI中第一个括号括起来的内容,$2、$3等类似(如果有的话)。这样,当请求是http://172.16.111.114/dir/subdir1/whaterver这种时,它将变成访问/dir/subdir1/testfile.html;若请求是http://172.16.111.114/dir/subdir2/whaterver时,它将访问/dir/subdir2/testfile.html这个文件。如下所示:

打开浏览器,按下F12键,切换到网络选项卡,再在浏览器地址栏中输入要访问的URL地址,就可以看到是否有URL重写或重定向:

原文地址:http://blog.51cto.com/techsnail/2138612

时间: 2024-11-10 13:17:44

nginx中的rewrite语句的相关文章

Nginx中的rewrite指令

转自:http://www.76ku.cn/articles/archives/317 rewite.在server块下,会优先执行rewrite部分,然后才会去匹配location块server中的rewrite break和last没什么区别,都会去匹配location,所以没必要用last再发起新的请求,可以留空..location中的rewirte:.不写last和break -    那么流程就是依次执行这些rewriterewrite break -        url重写后,直接

Nginx中的rewrite指令(break,last,redirect,permanent)

rewite 在server块下,会优先执行rewrite部分,然后才会去匹配location块 server中的rewrite break和last没什么区别,都会去匹配location,所以没必要用last再发起新的请求,可以留空 location中的rewirte: 不写last和break - 那么流程就是依次执行这些rewrite 1. rewrite break url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变 2. rewrite

Nginx中的Rewrite的重定向配置与实践

阅读目录 一:理解地址重写 与 地址转发的含义. 二:理解 Rewrite指令 使用 三:理解if指令 四:理解防盗链及nginx配置 简介:Rewrite是Nginx服务器提供的一个重要的功能,它可以实现URL重定向功能. 回到顶部 一:理解地址重写 与 地址转发的含义. 地址重写与地址转发是两个不同的概念. 地址重写 是为了实现地址的标准化,比如我们可以在地址栏中中输入 www.baidu.com. 我们也可以输入 www.baidu.cn. 最后都会被重写到 www.baidu.com 上

emlog在nginx中添加rewrite规则

rewrite ^/(post|record|sort|author|page)-([0-9]+)\.html$ /index.php?$1=$2; rewrite ^/tag-(.+)\.html$ /index.php?tag=$1; 把index.html 强制转换到index.php页面 rewrite ^/index.html$ /index.php last;

Nginx中 Rewrite学习笔记

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

nginx中location中关于proxy_pass和rewrite的应用

1,问题描述 upstream datacollectbackend{ #ip_hash; server 10.234.1.211:6100 max_fails=5 fail_timeout=30s; server 10.234.1.26:7100 max_fails=5 fail_timeout=30s; } location ~* ^/OCC_DATACO_WEB/.*$ { include deny.conf; proxy_pass http://datacollectbackend; i

nginx中rewrite用法

一.rewrite规则 rewrite功能就是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向. rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用,例如http://seanlook.com/a/we/index.PHP?id=1&u=str 只对/a/we/index.php重写.语法rewrite regex replacement [flag]; 如果相对域名或参数字符串

nginx中rewrite flag

rewrite  正则表达式  新URI  [flag]; [flag] 选项用于调控重写的行为,它的取值可能是: last:重写完成后,会停止继续处理当前区块所有属于ngx_http_rewrite_module模块的语句(即不会继续匹配当前区块余下的rewrite语句或其它属于该模块的语句).重写得到的新URL会重新匹配所有location语句,以进行进一步处理. break:重写完成后,会停止继续处理当前区块所有属于ngx_http_rewrite_module模块的语句(即不会继续匹配当

nginx指令之rewrite

语法:rewrite  regex replacement flag 默认值:none 使用环境:server,locacation,if 该指令根据表达式来重定向URL,或者修改字符串.指令根据配置文件中的顺序来执行. 注意:重写表达式只对相对路径有效.如果你想配对主机名,你应该使用if语句,代码如下: if ($host ~* www\.(.*)) {     set    $host_without_www $1;     rewrite ^(.*)$  permanent;  } 如果替