Rewtrite : 其主要目的是为了进行URL 重写,进行URL重定向。主要采用PCRE: Perl Compatible Regular Expressions(Perl兼容正则表达式语法)进行规则匹配,所以需要先安装PCRE lib。

一 rewrite规则

重写规则是rewirte的基础。在Nginx中,使用ngx_http_rewrite_module模块支持URL重写。该模块是标准的http模块。

二 if指令

用来支出条件判断,并且根据条件判断结果选择不同的Nginx配置,可以在server块或者location块中配置,语法结构:

if (condition) {…….}

对于condition而言:

# 变量名:如果变量的值为空字符串或者以0开头的任意字符串,if指令认为条件为false,其他情况认为条件为true,比如:

if($slow) {

//nginx配置

}

# 比较字符串是否相等,字符串无需加引号

if ($request_method = POST) {

return405;

}

# 使用正则表达式对变量进行匹配,匹配成功时,if条件指令为true,否则为false。

变量与正则表达式之间用"~""~*" "!~" "!~*" 连接,

"~":大小写敏感

"~*": 大小写不敏感

"!~":"~" 和"~*"匹配失败时,if指令认为条件为true,否则为false

if ($http_user_agent ~ MSIE) {

#$http_user_agent 是否包含MSIE字符

}

# 文件和目录是否存在,文件是否可执行

文件是否存在:使用-f 和 !-f

目录是否存在:使用-d 和 !-d

文件是否可执行:使用-x和!-x

if (-f $reqeust_filename) {

//......

}

三 break、return指令

3.1 break指令

该指令用于中断当前相同作用域中的其他Nginx配置。与该指令处于同一作用域的Nginx配置,位于他前面的指令配置生效,位于后面的指令配置无效。该指令可以在server块和location块以及if块中使用。

location / {

if($slow) {

set$id $1

break;

limit_rate10k

}

}

3.2 return指令

该指令用于完成队请求的处理,直接向客户端返回响应状态码。处于该指令后的所有Nginx配置是无效的。该指令可以在server或者location或者if块中使用。

return [ text]

return code URL;

return URL;

code: 表示返回给客户端的状态码

text: b表示相应的具体响应体内容

URL: 没有状态码的URL视为一个302状态码

四 rewrite指令

该指令通过正则表达式的使用来改变URI,可以同时存在一个或者多个指令,按照顺讯一次对URL进行匹配和处理。我们也可以理解我对于多条rewrite指令,顺序靠前的且匹配的优先执行。

语法格式:

rewrite regex replacement [flag];

regex: 用于匹配URI的正则表达式,使用括号()标记要截取的内容

replacement: 匹配成功后用于替换URI中被截取内容的字符串。默认情况下如果该字符串是由http://或者https://开头的,则不会继续向下对URI进行其他处理

flag: 用来设置rewrite对URI的处理行为,选项有:

# last: 停止当前这个请求,并根据rewrite匹配的规则重新发起一个请求。新请求又从第一阶段开始执行。

# break:相对last,break并不会重新发起一个请求,只是跳过当前的rewrite阶段,并执行本请求后续的执行阶段。

# redirect: 重写后的URI返回给客户端,状态码为302,指明是临时重定向

# permanent:重定向的URI返回给客户端,状态码为空301,指明是永久重定向

rewrite a.example.com http://b.example.com$request_uri? permanent;

location/break/ {

rewrite ^/break/(.*) /test/$1 break;

echo"break page";

}

location/last/ {

rewrite ^/last/(.*) /test/$1 last;

echo"last page";

}

location/test/ {

echo"test page";

}

结果如下:

[dubbo@docker conf]$ curlhttp://a.example.com/break/1111

break page

[dubbo@docker conf]$ curl http://a.example.com/test/2222

test page

[dubbo@docker conf]$ curlhttp://a.example.com/last/3333

test page

五 rewrite_log指令

rewrite_log on | off

该指令配置是否开启URL重写日志输出功能

六 set指令

用于设置一个新的变量,语法结构为:

set 变量名 变量值

七 rewrite常用全局变量

八 域名跳转

server {

listen80;

server_namejump.myweb.com;

rewrite^/ http://www.myweb.info/;

}

server {

listen80;

server_namejump.myweb.name  jump.myweb.info;

if($host ~ myweb\.info) {

rewrite^(.*) http://jump.myweb.name/$1 permanent;

}

}

九 域名镜像

镜像网站是指将一个完全相同的网站,分被放置到几个服务器上,并分别使用独立的URL,其中一个服务器上的网站叫做主站,其他的为镜像网站。镜像网站可以保存网页信息,历史性数据等,可以通过镜像网站提高在不同的地区响应速度,平衡网站的流量负载,解决网络带宽限制和封锁等

使用Nginx的rewrite实现镜像域名的跳转,原理就是将不同的镜像URL重写到相同的URL就可以了。

十 独立域名

当一个网站包含多个板块的时候,可以为其中某些板块设置独立的域名。

server {

listen80;

server_namebbs.exampel.com;

rewrite^(.*) http://www.example.com/bbs$1 last;

break;

}

server {

listen81;

server_namehome.exampel.com;

rewrite^(.*) http://www.example.com/home$1 last;

break;

}

十一 目录自动添加/

一般情况,对于网站默认的资源,我们不加具体的URL访问是可以的,比如访问www.example.com的时候,如果我们设置了站点的首页是index.html 那么直接访问www.example.com就可以成功访问。

但是如果请求的资源文件在二级目录下呢,这样的习惯无法正常访问资源,比如访问http://www.example.com/bbs/index.html时,如果URL省略为http://www.example.com/bbs,将末尾的斜杠也省了,访问就出问题,即Nginx服务器访问二级目录时不加斜杠无法访问。但是我们不可能要求客户端始终按照我们的要求在末尾加斜杠。如何解决呢?

server {

listen80;

server_namewww.example.com;

location^~ /bbs {

if(-d $request_filename) {

# 表示任意域名非/结尾 重定向到该任意域名以斜杠结尾

rewrite^/(.*) ([^/])$ http://$host/$1$2/ permanent;

}

}

}

十二 目录合并

有时候我们的网站的资源目录是多层级的,比如:

http://www.example.com/11/22/45/1023.html

这种方式不利于搜索引擎搜索,那么我们会尝试想办法让URL的目录级数看上去少一些呢?

server {

listen80;

server_name www.example.com;

location^~ /server {

rewrite^/server/([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)\.html$/server-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.html last;

break;

}

}

十三 防盗链

盗链是一种损害原有网站的合法利益,给原有网站所在的服务器造成额外的负担的非法行为。要采取防盗链的措施,首先理解盗链的实现原理:

比如我们自己网站的图片,是引用其他服务器的图片资源,那么客户端获取图片的请求,就是从其他服务器上下载的,这样对其他服务器不是很公平,增加了网络带宽。

要实现防盗链,HTTP头部的Referer头域和采用URL的格式访问当前网页或者文件的原地址。通过该头域可以检测到Referer头域中值并不是自己站点的URL,就采取阻止措施。

但是Referer头域的值是可以更该的,该方法不能够完全阻止所有的盗链行为。

valid_referers none | blocked | server_names|string......;

none: 检测Referer头域不存在

blocked: 检测Referer头域的值被防火墙或者代理服务器删除或者伪装的情况

server_names: 设置一个或者多个URL,查看Referer头域的值是这些的URL中的某个

server {

listen80;

server_namewww.example.com;

location~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {

valid_referersnoen blocked server_names *.ecom.com

if($valid_referers) {

rewrite^/ http://www.example.com/images/forbbiden.png

}

}

}

Nginx之rewrite配置相关推荐

  1. php ci nginx 伪静态rewrite配置方法

    php ci nginx 伪静态rewrite配置方法 location / {if (!-e $request_filename) {rewrite ^(.*)$ /index.php?s=/$1 ...

  2. nginx的rewrite配置

    nginx的rewrite配置 文章目录 nginx的rewrite配置 指令语法 应用位置 flag参数 常用正则表达式 指令语法 rewrite regex replacement [flag]; ...

  3. php伪静态框架,Nginx之php框架常见伪静态rewrite配置

    Last updated on 2020年5月20日 新建网站难免会重新配置 nginx 的 rewrite,这里记录下常见的问题及配置. 如果你配置好 rewrite 后仍然访问异常,请注意检查 n ...

  4. nginx的Rewrite和其他相关配置

    nginx配置location总结及rewrite规则写法   location正则写法 一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串[ configura ...

  5. Nginx ssl、rewrite配置

    一.安装环境 Nginx下载地址:nginx zlib下载页面:zlib pcre下载页面:pcre 二.编译安装: #useradd nginx -s /sbin/nologin #yum inst ...

  6. windows下nginx安装、配置与使用

    目前国内各大门户网站已经部署了Nginx,如新浪.网易.腾讯等:国内几个重要的视频分享网站也部署了Nginx,如六房间.酷6等.新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx ...

  7. nginx 多站点配置方法集合

    nginx 多站点配置方法集合 作者: 字体:[增加 减小] 类型:转载 时间:2011-06-28 我要评论 关于nginx的多站设置,其实和apache很相似,假设我们已经有两个域名,分别是:ww ...

  8. nginx 及 php 配置

    一. 配置nginx启动脚本以及nginx.conf 编写启动脚本 vim /etc/init.d/nginx //加入内容 #!/bin/bash # chkconfig: - 30 21 # de ...

  9. Nginx-windows下nginx安装、配置与使用

    目前国内各大门户网站已经部署了Nginx,如新浪.网易.腾讯等:国内几个重要的视频分享网站也部署了Nginx,如六房间.酷6等.新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx ...

最新文章

  1. 公共类java连接数据库_JDBC 建立连接公共操作类(静态方式与单例方式)
  2. 学习valueOf和toString,理解隐式转化规则
  3. 请概述可视化卷积神经网络的中间输出的基本思想。_卷积神经网络为什么能称霸计算机视觉领域?...
  4. python post请求参数错误,爬虫POST请求Json格式不清楚报错原因
  5. asp.net core 5.0的一些模块
  6. 洛谷P1605:迷宫(DFS)
  7. SQL文档阅读笔记-对水平分区和垂直分区理解
  8. 什么是QName【转】
  9. python求三个整数最大值_python 练习题:定义一个getMax()函数,返回三个数(从键盘输入的整数)中的最大值。...
  10. 再见了我热爱的ACM赛场
  11. 当第一资本、高盛、摩根士丹利等巨头纷纷启用CDO时,您想到了什么?
  12. win10电脑桌面透明便签_win10系统在桌面添加透明便签的图文技巧
  13. 关于马尔科夫链的期望收益在matlab中的实现
  14. js下载视频(mp4格式)
  15. Eclipse设置护眼豆沙绿
  16. 编译icedTea-web报错填坑之旅
  17. freeBSD 14 CURRENT 笔记本核显独显混合安装 nvidia驱动
  18. mysql事务使用转化_Mysql事务
  19. 小福利,用excel制作旋风图,小狗图和漏斗图
  20. 赋予DBLINK权限

热门文章

  1. 线性回归 php,PHP实现简单线性回归之数学库的重要性
  2. angular 字符串转换成数字_Python成为专业人士笔记–String字符串方法
  3. 华为鸿蒙开机不用广告,华为鸿蒙系统开机无广告:用户好评,友商品牌批评。只因树大招风...
  4. Java NIO学习篇之StandardOpenOption详解
  5. Python机器学习:多项式回归与模型泛化004为什么需要训练数据集和测试数据集
  6. 能导出_Handoff 插件上线!足不出 Figma 就能导出设计标注
  7. html5缓动下拉菜单,HTML5 Canvas鼠标跟随的缓动效果
  8. python //运算符
  9. c语言二维数组总成绩,c语言5个人3科成绩总分和平均分,用二维数组
  10. 学习linux装,一个初学者的Linux学习之旅之Linux安装篇