nginx地址重写模块

该ngx_http_rewrite_module模块用于使用PCRE正则表达式更改请求URI,返回重定向,以及有条件地选择配置。rewrite指令的功能就是,使用nginx提供的全局变量或自己设置的变量,然后结合正则表达式和标志位实现url重写以及重定向。
因此需要检查pcre是否安装

[[email protected]]# rpm -q pcre
pcre-8.32-17.el7.x86_64
break
break语法
语法 break;
默认 -
应用位置 server,location,if
停止处理任何rewrite的相关指令。如果出现在location里面,那么所有后面的rewrite模块指令都不会再执行,也不发起内部重定向,而是直接用新的URI进一步处理请求。

例子
location = /testbreak {
break;
return 200 $request_uri;
}
当uri中包含testbreak时,那么会停止执行后面的rewrite模块的命令,return属于rewrite模块。

if
if语法
语法 if (condition) { ... }
默认 -
应用位置 server,location
if中的几种判断条件
当变量的值为空字符串或“ 0”时,变量为false ;在1.0.1版之前,任何以“ 0” 开头的字符串都被视为false值。
使用“ =”和“ !=”运算符比较变量和字符串;
变量使用“ ~”(对于区分大小写的匹配)和“ ~*”(对于不区分大小写的匹配)运算符与正则表达式进行匹配。正则表达式可以包含可供以后在$1.. $9变量中重用的捕获。也可以使用!取反。
使用“ -f”和“ !-f”运算符检查文件是否存在;
使用“ -d”和“ !-d”运算符检查目录是否存在;
使用“ -e”和“ !-e”运算符检查文件,目录或符号链接是否存在;
使用“ -x”和“ !-x”运算符检查可执行文件。
例子:
if ($request_method = POST ) {
return 405;
}

if ( !-f $filename ) {
break;
}
return
停止处理并为客户端返回状态码,没有状态码的URL将被视为一个302状态码。
return语法

语法 return code [text];return code URL;return URL;
默认 -
应用位置 server,location
例子:

return code [text];

location = /1 {
return 200 "this is 1";
}

return code URL;

location = / {
return 302 http://www.wanger.com;
}

return URL;

location = / {
return http://www.wanger.com;
}
rewrite
应用场景
URL访问跳转,支持开发设计。 页面跳转、兼容性支持(新旧版本更迭)、展示效果(网址精简)等。
SEO优化(Nginx伪静态的支持)
后台维护、流量转发等。
安全(动态界面进行伪装)。
rewrite语法
语法 rewrite regex replacement [flag];
默认 -
应用位置 server,location,if
例子:
rewrite ^(.*) http://wanger.com/$1 permanent;
如果()里的正则表达式与请求的URI匹配,那么URI将根据replacement字符串中的指定进行更改,匹配成功将跳转到http://wanger.com/$1 ,$1的值是前面()里的正则匹配到的值,而后面的permanent是永久重定向301的标志,当rewrite 后面没有任何 flag 时就顺序执行

可选flag参数可以是以下之一:
flag标记 说明
last 本条规则匹配完成后继续匹配新的URI规则
break 本条规则匹配完成后不在进行新的URI匹配
redirect 302临时重定向,浏览器会显示跳转后的URL地址,当nginx 服务关闭的时候,将无法定向到特定的网站
permanent 301永久重定向,浏览器会显示跳转后的URL地址,除非客户端清理浏览器缓存
last与break的区别
last 和 break一样 它们都会终止此 location 中其他它rewrite模块指令的执行,last会重新将rewrite后的地址作为一个新的URI在server块中请求,而break会直接请求重写后的地址,并不会再进行新的请求

举个例子:
location ~ ^/break {
rewrite ^/break /test/ break;
}
location ~ ^/last {
rewrite ^/last /test/ last;
}
location /test/ {
default_type application/json;
return 200 ‘{"status":"success"}‘;
}
当我请求127.0.0.1/break时,浏览器返回的是404,因为break不会去请求/test/块,而网站根目录下test目录根本不存在,当我请求127.0.0.1/last时,浏览器返回的是{"status":"success"},因为last将地址重写后生成了新的请求,新的请求地址为/test/,然后与/test/块进行匹配,返回200状态码以及{"status":"success"}

set
用于定义一个变量,变量的值可以包含文本,变量或者是它们的组合形式。

set语法
语法 set $variable value;
默认 -
应用位置 server,location,if
例子
location /wanger {

return 302 http://60.205.177.168/huazai;

            root    html;
            index   index.html;
            set $var1 "client address is ";
            set $var2 $remote_addr;
            return 200 "$var1$var2";

}
效果如下:
curl 127.0.0.1/wanger
client address is 127.0.0.1
rewrite的一些实例
if ($host = "wanger.com"){
rewrite ^/(.)$ http://www.wanger.com/$1 permanent;
}
if (!-f $request_filename) {
rewrite ^/(.
) http://www.wanger.com/index.html;
}
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?$1 last;
}

原文地址:https://blog.51cto.com/14580626/2445906

时间: 2024-10-07 09:10:51

nginx地址重写模块的相关文章

nginx地址重写

1. 域名重定向 server_name wx.he.com weixin.ha.com; if ($http_host !~* "wx\.he\.com"){ rewrite ^/(.*)$ http://wx.he.com/$1 permanent; }

nginx之地址重写

nginx地址重写 1,语法格式:rewrite 旧地址 新地址 [选项]选项:rewrite 旧地址 新地址 [选项];last 不再读其他rewritebreak 不再读其他语句,结束请求redirect 临时重定向permament 永久重定向 2,实战 1)实现访问jluo.html重定向到jluocc.html(不跳转地址栏)#vim /usr/local/nginx/conf/nginx.confocation / {root html;index index.html index.

nginx rewrite uri地址重写

介绍 大家经常会遇到这样需求,一个活动页面的URL地址很长,推广起来产品运营和用户反馈不容易记住 不美观,但是暂时没办法修改代码,这个时候就可以用到rewrite.或者你现在网站升级到https现在有些用户还在访问http你想统一用https,这些都可以用rewrite规则来实现. rewrite会重写用户的请求地址,但是不会修改问号后面参数,返回给用户的httpcode为302. 语法:rewrite regex replacement [flag]; 作用域:server, location

nginx篇最初级用法之地址重写

nginx服务器的地址重写,主要用到的配置参数是rewrite rewrite regex replacement flag rewrite 旧地址 新地址 [选项] 支持的选项有: last 不再读其他rewrite break 不再读其他语句,结束请求 redirect 临时重定向 permament 永久重定向 在nginx网页目录中添加两个页面进行测试 [[email protected] html]# echo "new page" > new.html [[email

Nginx专题: upstream模块和缓存的简单使用

Nginx专题: upstream模块和缓存的简单使用 前言: 本文接着上篇Nginx专题: 从编译安装到URL重写来介绍Nginx的负载均衡模块使用方法, 本文的实验没有考虑大多数情况, 例如两个web服务器之间的数据同步等, 主要写Nginx如何作为负载均衡器使用并且缓存 实验拓扑 实验环境 主机 IP地址 功用 lb.anyisalin.com 172.16.1.2 负载均衡并缓存静态资源 web1.anyisalin.com 172.16.1.3 提供web服务 web2.anyisal

Nginx URL重写(rewrite)配置及信息详解

Nginx URL重写(rewrite)配置及信息详解 URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中 Nginx URL重写(rewrite)介绍 和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向.Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的.默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持 rewrite是实现URL重写的关

linux-Centos-7-64位:5、 nginx代理+sticky模块实现基于cookie的负载均衡

nginx 可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. 准备工作: 1.安装必备工具: 编译环境gcc g++ 开发库之类的需要提前装好 $ yum -y install gcc gcc-c++ autoconf automake 安装过程中如果出现如下图错误: 原因: dns服务器没有配置正确 解决办法: ①.打开文件/etc/resolv.conf在其中添加: nameserver 8.8.8.8 nameserver 8.8.4.4 search l

Yii2 Apache + Nginx 路由重写

一.什么是路由重写 原本的HTTP访问地址: www.test.com/index.php?r=post/view&id=100 表示这个请求将由PostController 的 actionView来处理. 重写后的HTTP访问地址 www.test.com/post/view/id/100 这样的链接看起来简洁美观,对于用户比较友好.同时,也比较适合搜索引擎的胃口, 据说是SEO的手段之一. 二.Apache 路由重写 (一)开启Apache的重写模块 1. 打开apache的config的

nginx上传模块nginx_upload_module和nginx_uploadprogress_module模块进度显示,如何传递GET参数等。

ownload:http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gzconfigure and make : ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module   --add-module=/data/software/lnmp1.