4.Nginx的URL重写应用
Nginx的URL重写应用
nginx的URL重写模块是用得比较多的模块之一,所以我们需要好好地掌握运用。常用的URL重写模块命令有if,rewrite,set,break等。
- if命令
if用于判断一个条件,如果条件成考,则执行后面大括号内的语句,相关配置从上级继承。if命令的使用方法如下:
语法:if(condition) {….} # condition:条件
默认值:none
使用字段:server,location
默认情况下,if命令值为null,可在Nginx配置文件的server,location部分使用,另外,
if命令可以在判断语句中指定正则表达式或匹配条件,相关匹配条件如下:
正则表达式匹配:
- ~表示区分大小写匹配
- ~*表示不区分大小写匹配
- !~和!~*表示上面2种不匹配
文件及目录匹配:
- -f和!-f用来判断是否存在文件
- -d和!-d用来判断是否存在目录
- -e和!-e用来判断是否存在文件或目录
- -x和!-x用来判断文件是否可执行
Nginx配置文件中有很多内置变量,这些变量经常和if命令一起使用。常见的内置变量
有如下几种:
- $args:此变量与请求行中的参数相等。
- $document_root:此变量等同于当前请求的root命令指定的值。
- $uri:此变量等同于当前request中的URI。
- $document_uri:此变量与$uri含义一样。
- $host:此变量与请求头部中“Host”行定义的值一致。
- $limit_rate:此变量用来设置限制连接的速率。
- $request_method:此变量等同于request的method,通常是“GET”或“POST”。
- $remote_addr:此变量表示客户端的ip地址。
- $remote_post:此变量表示客户端端口。
- $remote_user:此变量等同于用户名。由 ngx_http_auth_basic_module模块认证。
- $request_filename:此变量表示当前请求的文件的路径名,由root或alias与URI request组合而成。
- $request_uri:此变量表示含有参数的完整的初始URI。
- $query_string:此变量与$args含义一致。
- $server_name:此变量表示请求到达的服务器名。
- $server_port:此变量表示请求请求到达的服务器端口号。
在了解相关的if命令规则和Nginx内置变量后,下面给出一个server配置段实例:
server {
listen 80;
server_name www.gxl.com;
location / {
root html;
index index.html index.htm index.php;
}
location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ {
root html;
expires 30d;
if ( !-f $request_filename )
{
root /var/www/html
}
if ( !-f $request_filename )
{
root /emp
}
}
location ~ \.(jsp|jspx|do)$ {
root html;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;
if ( !-f $request_filename )
{
root /var/www/html
}
}
}
当我们访问以gif结尾的文件的时候,我们先在root定义的目录下查找,然后再在下面依次的目录查找。
- rewrite命令
nginx通过ngx_http_rewrite_module模块支持URL重写和if条件判断,但要使用rewrite功能,需要pcre支持,应在编辑nginx时指定pcre源码目录。rewrite的使用语法如下:
语法:rewrite regex flag
默认值:none
使用字段:server,location,if
在默认情况下,rewrite命令默认值为空,可在nginx配置文件的server,location,if部分使用,rewrite命令的最后一项参数为flag标记,其支持的flag标记主要有以下几种。
last:相当于Apache里的[L]标记,表示完成rewrite之后搜索相应的URL或location。
break:表示终止匹配,不在匹配后面的规则。
redirect:将返回302临时重定向,在浏览器地址栏会显示跳转后的URL地址。
permanent:将返回301永久重定向,在浏览器地址栏会显示跳转后的URL地址。
其中,last和break用来实现URL重写,浏览器地址栏中的URL地址不变。下面是一个示例配置:
location ~ ^/best/ {
rewrite ^/best/(.*)$ /test/$1 break;
proxy_pass http://www.fjp.com;
}
这个例子使用了break标记,可以实现将请求http://www.gxl.com/best/index.html的页面重定向到http://www.fjp.com/test/index.html页面,而不引起浏览器地址栏中URL的变化。这个功能在新旧网站交替的时候非常有用。
- set命令
通过set命令可以设置一个变量并为其赋值,其值可以是文本,变量,或他们的组合。也可以使用set定义一个新的变量,但是不能使用set设置$http_xxx头部的值。
set使用语法如下:
语法:set variable value
默认值:none
使用字段:server,location,if
在默认情况下,set命令默认值为空,可在nginx配置文件的server,location,if部分使用,下面是一个示例配置:
location / {
root html;
index index.html index.htm index.php;
proxy_cache cache_one;
proxy_cache_valid 200 304 12h;
proxy_cache_key $host$uri$is_args$args;
# proxy_pass http://127.0.0.1:8080;
set $query $query_string;
rewrite /dede /wordpress?$query?;
}
在这个例子中,要实现将请求为http://www.tb.com/dede/?p=160的页面重写到地址http://www.tb.com/wordpress/?p=160,也就是重写带参数的URL。这里涉及$query_string变量,这个变量相当于请求行中的参数,也就是?后面的内容,也可以用$args代替$query_string变量。
- breadk命令
break的用法在前面的介绍中其实已经出现过,他表示完成当前设置的规则后,不再匹配后面的重写规则。break的使用语法如下:
语法:break
默认值:none
使用字段:server,location,if
在默认情况下,break命令的值为空,可在nginx配置文件的server,location,if部分使用,下面事一个应用实例:
server {
listen 80;
server_name www.gxl.com www.fjp.com;
if ( $host != 'www.fjp.com' ) {
rewrite ^/(.*)$ http://www.fjp.com/error.txt break;
rewrite ^/(.*)$ http://www.fjp.com/$1 permanent;
}
}
这个例子中定义了两个域名,当通过www.gxl.com访问网站时,会将请求重定向到http://www.fjp.com/error.tx页面,而通过www.fjp.com能够正常访问,而且由于上一句设置了break命令,因此下面的rewrite规则不在执行,直接退出。
4.Nginx的URL重写应用的更多相关文章
- nginx的URL重写应用实例
1,NGINx的URL重写 NGINX 的URL重写模块用的比较多,主要使用的命令有if rewrite set break 2 if命令 语法如下"" 语法:if(conditi ...
- Nginx实现URL重写
本文利用Nginx实现URL重写,本文使用Nginx与静态页面配合重写URL. 1.准备工作. 结合本文场景,需要安装Nginx. 1.1 关于Linux系统安装Nginx可以参考我的文章---(传送 ...
- nginx配置url重写
url重写是指通过配置conf文件,以让网站的url中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态.301重定向.浏览器定向等 rewrite 语法 在配置文件的server块中写,如: s ...
- nginx的url重写
1.1 简介 url重写由ngx_http_rewrite_module模块提供,默认会安装,但该模块功能的实现需要pcre.URL重写技术不仅要求掌握几个指令的语法.熟悉简单的正则表达式,还需要尽量 ...
- Nginx之URL重写(rewrite)配置
Nginx URL重写(rewrite)配置及信息详解1)if判断指令 语法为if(condition){…} #对给定的条件condition进行判断.如果为真,大括号内的rewrite指令 ...
- nginx的url重写[rewrite规则和参考]
本日志内容来自互联网和平日使用经验,整理一下方便日后参考. Nginx Rewrite 相关指令有 if.rewrite.set.return 等. if 的语法 应用于 server 和 locat ...
- lnmp配置支持thinkphp和nginx路由url重写
ThinkPHP3.2.3项目放到lnmp环境之后只能打开首页,或者通过传参方式打开控制器,否则就一直显示404页面.搞了一上午,终于解决了 step1: 修改php.ini cgi.fix_path ...
- nginx-url重写
location /game_web{ if (!-e $request_filename){//请求不是文件或者目录 rewrite ^/game_web/(\/init/$ last; break ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...
随机推荐
- javascript的BOM,DOM对象
BOM对象 window对象 所有浏览器都支持 window 对象.概念上讲.一个html文档对应一个window对象.功能上讲: 控制浏览器窗口的.使用上讲: window对象不需要创建对象,直接使 ...
- jsp加java连接数据库,进行信息输入,并进行初步的拦截判断。
图形大概这样 按照图片要求设计添加新课程界面.(0.5分) 在后台数据库中建立相应的表结构存储课程信息.(0.5分) 实现新课程添加的功能. 要求判断任课教师为王建民.刘立嘉.刘丹.王辉.杨子光五位教 ...
- wkwebview加载本地html的要点
项目中有些页面,我采用了html页面开发,然后用wkwebview加载的设计.在加载过程中遇见了一些问题,在这里进行一些记载和讨论.如有不同意见欢迎进行评论沟通. 问题时候这样的: 在webview的 ...
- ssh中Hibernate懒加载,session问题的学习与理解
交代本项目中要求获取session的方式如下: public Session getCurrentSession() { // 增删改使用的session,事务必须是开启的(Required,即pro ...
- IntelliJ IDEA(二) :面板介绍
一.面板说明 IDEA面板的全貌如下图 二.菜单栏 下面会简单介绍下一些常用的部分菜单使用,如有疑问或补充欢迎留言. (1).File文件 1. New:新建一个工程 可以新建project,导入已存 ...
- file-loader 使用心得
将webpack 里面的图片文件都放在制定文件夹. 配置如下 { test: /\.png$/, loader: "file-loader?name=imgs/[name]-[hash].[ ...
- 第四届河南省ACM SUBSTRING 字符串处理
SUBSTRING 时间限制: 1 Sec 内存限制: 128 MB 提交: 17 解决: 5 [提交][状态][讨论版] 题目描述 You are given a string input. Y ...
- lodash源码分析之compact中的遍历
小时候, 乡愁是一枚小小的邮票, 我在这头, 母亲在那头. 长大后,乡愁是一张窄窄的船票, 我在这头, 新娘在那头. 后来啊, 乡愁是一方矮矮的坟墓, 我在外头, 母亲在里头. 而现在, 乡愁是一湾浅 ...
- Scala入门系列(十二):隐式转换
引言 Scala提供的隐式转换和隐式参数功能,是非常有特色的功能.是Java等编程语言所没有的功能.它可以允许你手动指定,将某种类型的对象转换成其他类型的对象.通过这些功能可以实现非常强大而且特殊的功 ...
- ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现
很长一段时间以来,我都在思考如何在ASP.NET Core的框架下,实现一套完整的事件驱动型架构.这个问题看上去有点大,其实主要目标是为了实现一个基于ASP.NET Core的微服务,它能够非常简单地 ...