Nginx实战(二) URL重写

2023-10-26

本文转载至:http://blog.csdn.net/u012486840/article/details/52787232

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

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

相关指令

if指令

语法:if(condition){…}

使用环境:server,location

该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句。if指令不支持嵌套,不支持多个条件&&和||处理。

其中,condition中可以包含的判断标识如下

  • ~为区分大小写匹配
  • ~*为不区分大小写匹配
  • !~区分大小写不匹配
  • !~*不区分大小写不匹配
  • -f和!-f用来判断是否存在文件
  • -d和!-d用来判断是否存在目录
  • -e和!-e用来判断是否存在文件或目录
  • -x和!-x用来判断文件是否可执行

例如,示例,如果是IE浏览器就进行跳转

  
  
  1. if ($http_user_agent ~MSIE){
  2. rewrite ^(.*)$/msie/$1 break;
  3. }

return指令

语法:return code

使用环境:server,location,if

该指令用于结束规则的执行并返回状态吗给客户端。状态码包括:204(No Content)、400(Bad Request)、402(Payment Required)、403(Forbidden)、404(Not Found)、405(Method Not Allowed)、406(Not Acceptable)、408(Request Timeout)、410(Gone)、411(Length Required)、413(Request Entity Too Large)、416(Requested Range Not Satisfiable)、500(Internal Server Error)、501(Not Implemented)、502(Bad Gateway)、503(Service Unavailable)和504(Gateway Timeout)。

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

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

set指令

语法:set variable value

使用环境:server,location,if

该指令用于定义一个变量,并给变量赋值。

rewrite指令

语法:rewrite regex replacement flag

使用环境:server,location,if

该指令根据表达式来重定向URI,或者修改字符串。

flag标记有:

  • last相当于Apache里的[L]标记,表示完成rewrite
  • break终止匹配, 不再匹配后面的规则
  • redirect返回302临时重定向 地址栏会显示跳转后的地址
  • permanent返回301永久重定向 地址栏会显示跳转后的地址

例如,示例,将www重定向到http://

  
  
  1. if ($host ~* www\.(.*)){
  2. set $host_without_www $1;
  3. rewrite ^(.*)$ http://$host_without_www$1 permanent;
  4. }

使用案例

域名永久重定向

  
  
  1. rewrite ^(.*)$ http://blog.720ui.com permanent;

当访问的文件和目录不存在时,重定向到某个html文件

  
  
  1. if ( !-e $request_filename ){
  2. rewrite ^/(.*)$ error.html last;
  3. }

访问目录跳转

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

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

目录对换

  
  
  1. /123456/xxxx ====> /xxxx?id=123456
  2. rewrite ^/(d+)/(.+)/ /$2?id=$1 last;

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

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

防止盗链

根据Referer信息防止盗链

  
  
  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.lianggzone.com/error.html
  5. }

禁止访问以/data开头的文件

  
  
  1. location ~ ^/data
  2. {
  3. deny all;
  4. }

禁止访问以.sh,.exe为文件后缀名的文件

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

设置某些类型文件的浏览器缓存时间

  
  
  1. location ~ .*.(gif|jpg|jpeg|png|bmp)$
  2. {
  3. expires 30d;
  4. }
  5.  
  6. location ~ .*.(js|css)$
  7. {
  8. expires 1h;
  9. }

设置过期时间并不记录404错误日志

favicon.ico和robots.txt设置过期时间,为favicon.ico为99天,robots.txt为7天并不记录404错误日志。

  
  
  1. location ~(favicon.ico) {
  2. log_not_found off;
  3. expires 99d;
  4. break;
  5. }
  6.  
  7. location ~(robots.txt) {
  8. log_not_found off;
  9. expires 7d;
  10. break;
  11. }

设置过期时间并不记录访问日志

设定某个文件的过期时间;这里为600秒,并不记录访问日志

  
  
  1. location ^~ /html/scripts/loadhead_1.js {
  2. access_log off;
  3. root /opt/lampp/htdocs/web;
  4. expires 600;
  5. break;
  6. }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx实战(二) URL重写 的相关文章

  • 原码和补码在计算机中的应用,原码,补码和反码在计算机中的作用

    满意答案 xxyy5566123 2013 06 26 采纳率 58 等级 12 已帮助 13466人 引入原码 反码 和补码的目的就是为了解决减法问题 因为计算机CPU的运算器中只有加法器 要把减法转化成加法来计算 举个例子 A表示十进制
  • 【面试系列】反转链表II

    题意 原题链接 思路 先找到 L R L R L R 由于我们是翻转区间 L R
  • eclipse 下面的folder,source folder,package的区别与作用

    首先明确一点 folder source folder package都是文件夹 既然是文件夹 那么任何的文件都可以往这三种文件夹下面的放 1 他们的区别 folder就是普通的文件夹 它和我们window下面使用的文件夹没有任何区别 so
  • Java 面试知识点合集

    一 基础篇 1 1 java基础 1 面向对象的特征 封装 继承 多态 1 封装 属性能够描述事物的特征 方法能够描述事物的动作 封装就是把同一类事物的共性 包括属性和方法 归到同一类中 方便使用 封装的好处有 隐藏数据及实现细节 对每个属
  • web_servlet总结

    1 Web流程 1 1软件架构 1 C S 客户端 服务器端 cs架构建立在专用的网络上 一般面向相对固定的用户群 它可以对权限进行多层次校验 提供了更安全的存取模式 对信息安全的控制能力很强 2 B S 浏览器 服务器端 bs架构建立在广
  • 服务器千兆网络显示10,win10系统如何查看网卡是千兆还是百兆

    现在的很多新主板配备的都是千兆网络接口 可以更好的满足大宽带用户需求 但是对于win10系统用户来说 并不知道要如何查看网卡是千兆还是百兆 其实方法很简单 现在给大家分享一下win10系统查看网卡是千兆还是百兆的具体解决方法 方法一 1 在

随机推荐

  • 【 ST-LINK\ ST-LINK Utility下载,烧录,批处理操作\命令行】

    必看 必看 必看 下面概述了以下几个烧录软件下载安装 写程器接线 批处理操作内容较多耐心看完 J Falsh 可以称得上目前主流 能烧录目前80 主流芯片 STM32 ST LINK Utility ST系列芯片烧录超方便 ST系列 ST全
  • uview u-input 点击清除按钮,数据清空但视图未清空

    问题描述 点击 uview 的 u input 输入框自带的清除按钮 v model 绑定的数据清空了 但是输入框内还显示着之前的数据 解决方案 将 v model 绑定的值写到 data 初始变量中声明 原始代码
  • pandas的Excel文件读写(一)——组件要求与文件读取

    一 组件要求 实现pandas的Excel文件读写 除了安装pandas外 还需要安装下列组件 1 xlrd 从指定的xls格式文件中读取数据 2 xlwt 写入数据到指定的xls格式文件 3 openpyxl 支持xlsx格式文件的读写
  • 视频下载算法分析

    import random import re import time import requests from Crypto Cipher import AES from Crypto Util Padding import pad fr
  • centos7最小化安装发现没ifconfig命令解决方法

    1 安装的最小化版mini没有ifconfig这个命令 解决方法 yum y install net tools 出现图中错误 怀疑系统还不能上网导致 尝试ping114 114 114 114 如下图 果然不能ping通 的确是网络不通
  • CausalEGM安装使用

    1代码来源 github https github com SUwonglab CausalEGM tree main src pip Tutorial for Python Users CausalEGM documentation 安装
  • 2022.6.27小记

    1 不同页面件间锚点跳转 vue实现不同页面间锚点跳转 半塘潮汐的博客 CSDN博客 不同页面使用锚点 2 vue监听页面滚动距离 mounted window addEventListener scroll this handleScro
  • 玩转Mixly – 3、Arduino AVR编程 之 控制

    以下内容源自Mixly官方技术文档 https mixly readthedocs io zh CN latest Arduino AVR 02Control html 控制 控制类别中包括了时间延迟 条件执行 循环执行 获取运行时间 初始
  • java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM

    目录 基础篇 一 Get 和 Post 的区别 二 Java 多态的具体体现 三 StringBuffer StringBuilder String 区别 四 和 equals 区别 五 重写 equals 需要重写 hashCode 吗
  • 二叉树:深度优先遍历与广度优先遍历(及其Python实现)

    二叉树 深度优先遍历与广度优先遍历 及其Python实现 本问记录二叉树的深度优先遍历算法和广度优先遍历算法的特点及其python实现 1 深度优先遍历 深度优先遍历算法包括先序遍历 中序遍历和后续遍历 1 1 深度优先遍历顺序 我们根据下
  • iOS进阶_密码学进阶(一.对称加密算法简介)

    加密算法 HASH 散列函数 不可逆 密码 识别 文件 识别 以下两种加密算法 都是可逆的 明文 gt 加密 gt 密文 密文 gt 解密 gt 明文 对称加密 传统加密算法 加密和解密使用同一个 密钥 密钥的保密工作就非常的重要 密钥会定
  • 我们在囧途之程序员转型记

    http blog csdn net shenyisyn article details 8485181 注 本文使用第一人称 原型取材于周围同事或民间 不代表作者本人 我在一个只有10人不到的小网络公司 我们公司的业务实在是单一的不能再单
  • FCGI协议的header解析

    FCGI协议的heade比较简单只有8个字节 其C语言定义格式如下 typedef struct unsigned char version 版本 unsigned char type 操作类型 unsigned char requestI
  • 多线程中内核对象人工重置和自动重置的区别

    在多线程编程中 要创建内核对象可以有两个选择 即可以将内核对象创建为人工重置方式 也可以创建为自动重置方式 人工重置方式的时候 一旦内核对象得到通知 所有等待该内核对象的线程都变为可调度线程 等待CPU分配时间 如果程序没有主动将该内核置为
  • StableDiffusion/NAI DreamBooth自训练全教程

    原文 StableDiffusion NAI DreamBooth自训练全教程 知乎 在正式教程之前 聊聊dreambooth的发展 帮大家理清一下思绪 dreambooth发展史 画了张图帮助大家理解dreambooth的发展史 drea
  • 出现org.springframework.beans.factory.NoSuchBeanDefinitionException 的解决思路

    Caused by org springframework beans factory BeanCreationException Could not autowire field private cn itcast crm service
  • 嵌入式工程师有发展前途吗?

    嵌入式工程师有发展前途吗 现在来看 无论是软件开发还是嵌入式等 都是青春饭 但是软件 java 安卓 ios等应用层 的工资都稍高于嵌入式 但是嵌入式的门槛却非常高 是否应 显示全部 关注者 1 379 被浏览 1 046 366 已关注
  • Cyclic Nacklace 【HDU - 3746】【KMP补周期】

    KMP算法的讲解 自己的领悟可随时提问 题目链接 题意 有一个字符序列 现在问你 序列后面最少补充几个元素使其恰能成为几个重复循环的序列 题目还是很良心的 让我们求字符串后面放几个字符可以使其变成周期字符串 所以还是可以想到用KMP的nex
  • 接口自动化测试做线上巡检,如何避免数据污染

    在接口自动化测试中 避免数据污染是非常重要的 特别是在线上环境中进行巡检 1 使用独立的测试环境 建议使用专门的测试环境来进行接口自动化测试 而不是直接在生产环境中进行 测试环境应该是一个独立的 与生产环境隔离的环境 确保测试期间不会对真实
  • Nginx实战(二) URL重写

    本文转载至 http blog csdn net u012486840 article details 52787232 Rewrite主要的功能就是实现URL的重写 Nginx的Rewrite规则采用PCRE Perl兼容正则表达式的语法