Nginx Rewrite规则初探(转)

Nginx  rewrite(nginx url地址重写)
Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。

通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。

if        指令
规则语法:

[plain] view plain copy

  1. if ($http_user_agent ~MSIE){
  2. rewrite ^(.*)$/msie/$1 break;
  3. }
  4. if (!-f$request_filename){
  5. rewrite ^/img/(.*)$/site/$host/images/$1 last;
  6. }

rewrite 语法规则:
变量名:
    变量名可以使用"="或"!="运算符
     ~  符号表示区分大小写字母匹配
     ~* 符号表示不区分大小写字母匹配
     !~ 和 !~ 与~  !~ 相反
     -f 和 !-f   用来判断文件是否存在
     -d 和 !-d   用来判断目录是否存在
     -e 和 !-e   用来判断文件或目录是否存在
     -x 和 !-x   用来判断文件是否可以执行
      也支持$1到$9位置参数

return指令
示例:,如果访问的URL以.sh .bash 结尾,返回状态码403

[plain] view plain copy

  1. location ~ .*\.(sh|bash)?$
  2. {
  3. return 403;
  4. }

rewrite指令

[plain] view plain copy

  1. rewrite指令的最后一项参数为flag标记,支持的flag标记主要有以下几种:
  2. last :相当于Apache里德(L)标记,表示完成rewrite;
  3. break;本条规则匹配完成后,终止匹配,不再匹配后面的规则
  4. redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
  5. permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
  6. last和break用来实现URL重写,浏览器地址栏URL地址不变

实例:将访问/b跳转到/bbs目录上去:

[plain] view plain copy

  1. location /b   {
  2. autoindex  on;
  3. alias /usr/local/nginx/html/redhat;
  4. rewrite ^/b/?$ /bbs permanent;
  5. }
  6. location /bbs {
  7. autoindex on;
  8. alias /usr/local/nginx/html/bbs;
  9. }

rewrite规则编写实例
1,将原来要访问/b的目录重写为/bbs
     核心语句:

[plain] view plain copy

  1. rewrite ^/b/?$ /bbs permannet;

2,根据不同的浏览器将得到不同的结果。

[plain] view plain copy

  1. if ($http_user_agent ~ Firefox) {
  2. rewrite ^(.*)$ /firefox/$1 break;
  3. }
  4. if ($http_user_agent ~ MSIE) {
  5. rewrite ^(.*)$ /msie/$1 break;
  6. }
  7. if ($http_user_agent ~ Chrome) {
  8. rewrite ^(.*)$ /chrome/$1 break;
  9. }

3.防止盗链:

根据Referer信息防止盗链,代码如下:

[plain] view plain copy

  1. location ~*\.(gif|jpg|png|swf|flv)${
  2. valid_referers none blocked www.cheng.com*.test.com;
  3. if ($invalid_referer)
  4. rewrite ^/(.*) http://www.cheng.com/error.html
  5. }

4.实现域名跳转:

[plain] view plain copy

  1. server {
  2. listen       80;
  3. server_name  cheng.example.com;
  4. write ^(.*)$  http://zhang.example.com/$1 permanent;
  5. location / {
  6. root   html;
  7. index  index.html index.htm;
  8. }

http://blog.csdn.net/xifeijian/article/details/20955253

时间: 07-08

Nginx Rewrite规则初探(转)的相关文章

Nginx Rewrite规则

location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 # 但是正则和最长字符串会优先匹配 [ configuration B ] } location /documents/ { # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索 # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条 [ configu

Nginx高级应用--负载均衡、rewrite规则

Nginx除了可以用作web服务器外,他还可以用来做高性能的反向代理服务器,它能提供稳定高效的负载均衡解决方案.nginx可以用轮询.IP哈希.URL哈希等方式调度后端服务器,同时也能提供健康检查功能.目前有众多公司均已经部署使用nginx实现基于七层的负载均衡功能. 一. Nginx负载均衡 为了实现Nginx的反向代理以及负载均衡功能,应用中需要用到两个模块,HttpProxyModule和HttpUpstreamModule模块:其中HttpProxyModule模块的作用是将用户的数据请

nginx——rewrite模块

1.什么是Nginx的Rewrite规则? Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE(Perl Compatible Regular Expressions)Perl兼容正则表达式的语法进行规则匹配,如果 您需要Nginx的Rewrite功能,在编译Nginx之前,须要编译安装PCRE库. 通过Rewrite规则,可以实现规范的URL,根据变量来做URL转向及选择配置. (1)一些使用MVC框架的程序只有一个入口,可以通过Rewrite来实现. (

nginx rewrite重写与防盗链配置

nginx rewrite重写规则与防盗链配置方法 时间:2016-02-04 15:16:58来源:网络 导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标记的几种形式,盗链时返回403错误,允许的域名直接跟在第二行的域名后面. nginx rewrite重写规则与防盗链配置方法 nginx rewite 规则,官方文档:http://wiki.nginx.org/NginxHttpRewriteModule nginx rewrite规则格式:rew

转:Nginx 配置 location 总结及 rewrite 规则写法

转: http://www.linuxidc.com/Linux/2015-06/119398.htm 1. location正则写法 一个示例: location =/{ # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location /{ # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 # 但是正则和最长字符串会优先匹配 [ configuration B ] } location /documents/{ # 匹配任何以 /do

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

https://segmentfault.com/a/1190000002797606 location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 # 但是正则和最长字符串会优先匹配 [ configuration B ] } location /documents/ { # 匹配任何以 /documents

nginx discuz 伪静态rewrite规则

越来越多的人把apache转到nginx,对于运行php来说,转移比较容易些. 但要实现伪静态,rewrite配置就会复杂一些,大多数人的问题都出在这里. 下面是nginx下discuz url rewrite配置模板,供大家参考. 注意:修改server_name,root为你的实际配置. 其它常见rewrite nginx wordpress rewrite规则 nginx cakephp rewrite规则 server { listen 80; server_name www.264.c

实例讲解Nginx下的rewrite规则 来源:Linux社区

一.正则表达式匹配,其中:* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配二.文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* -d和!-d用来判断是否存在目录* -e和!-e用来判断是否存在文件或目录* -x和!-x用来判断文件是否可执行三.rewrite指令的最后一项参数为flag标记,flag标记有:1.last    相当于apache里面的[L]标记,表示rewrite.2.break本条规则匹配完成后,终止匹配

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