Nginx Rewrite使用场景及配置方法解析

Nginx Rewrite使用场景

1.URL地址跳转,例如用户访问pm.com将其跳转到baidu.com或者当用户通过http的方式访问时,将其跳转至https的方式访问。

2.URL伪静态,将动态页面显示为静态页面方式的一种技术,减少动态URL地址对外暴露过多的参数,提升更高的安全性。

3.搜索引擎SEO优化依赖于URL路径,以便支持搜索引擎录入

4.可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。

配置语法

rewrite regex replacement [flag];

4中flag

last 停止处理后续rewrite指令集,跳出location作用域,并开始搜索与更改后的URI相匹配的location,URL地址不变

break 停止处理后续rewrite指令集,不会跳出location作用域,不再进行重新查找,终止匹配,URL地址不变

redirect 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址,爬虫不会更新自己的URL数据库

permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫会更新自己的URL数据库

注:使用last和break时浏览器中的地址不会改变,使用redirect和permanent则会改变

举例说明:

location /abc/ {
  rewrite ^/abc/(.*) /whsir/$1 break;
  return 401;
}
location /opq/ {
  rewrite ^/opq/(.*) /whsir/$1 last;
  return 402;
}
location /whsir/ {
  return 403;
}

输入abc后,如果能匹配到whsir的内容,则返回200,否则返回404

输入opq后,如果能匹配到whsir的内容,则返回403,否则返回404

last和break只返回一个状态码即成功或失败,redirect和permanent会先返回302或301,在返回成功或失败

常用的Nginx全局变量:

例:http://www.pm.com:99/aa/bb/test.php

$host        www.pm.com

$server_port     99

$request_uri     /aa/bb/test.php

$document_root   /pm_code

$request_filename  /pm_code/aa/bb/test.php

案例1:外部跳转

打开lb01虚拟机,先将之前的自定义配置文件关闭,新建/etc/nginx/conf.d/rewrite.conf

注:^/意思为以根(这里根目录为/pm_code,对应域名为www.pm.com)开头的url都会重定向到百度。

修改/etc/nginx/nginx.conf文件

将错误日志级别修改为notice使其能记录到重定向信息(debug, info, notice, warn, error, crit越靠前记录的信息越多)

在http模块中添加一行

rewrite_log on;(打开rewrite日志记录)

测试

在浏览器地址栏中输入www.pm.com(在hosts中已配置好),会重定向到百度首页

案例2:内部跳转

更改/etc/nginx/conf.d/rewrite.conf内容

在/pm_code中创建文件2.html(内容222),在浏览器中输入www.pm.com/1.html

在错误日志中查看记录

使用return

在上述方法中,浏览器地址栏中显示的是1.html,而网页内容是2.html的内容,如果想要地址栏中也显示2.html,将location中的内容更改为 return 302 /2.html; 或者 rewrite .* /2.html redirect;

使用正则

例:将www.pm.com/2020/* 重定向到 www.pm.com/2019/*

括号代表一个整体,$1代表前面第一个括号内的内容

将http跳转到https

注:nginx 1.14版本后可以不用写ssl on了,listen那里写成listen 443 ssl;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-09-07

Nginx URL重写rewrite机制原理及使用实例

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

Nginx rewrite正则匹配重写的方法示例

Nginx的rewrite功能支持正则匹配重写,即将URL地址临时或永久重新指向某个新的位置,类似于重定向.这个特性有利用当网站结构做出重大调整,如之前的网站mp3资源使用URL为www.site1.org/mp3进行访问,而现在服务器上mp3目录已经被使用music目录替换,那rewrite这个功能则能够轻松实现.其次如可以将site1.org强制调整到www.site1.org,反之亦可.这个指令位于ngx_http_rewrite_module模块.本文主要描述这个指令的用法并给出演示.

详解常用的nginx rewrite重写规则

本文提供一些常用的rewrite重写规则,用来美化网页的链接.规则里面的$1$2你不知道是怎么来的话,只要记住,第一个()里面的是$1,第二个()里面的是$2. 请求的URL是给人看的,重写后的URL是给电脑看的. 执行搜索 这个规则的目的是为了执行搜索,搜索URL中包含的关键字. 请求的URL //hqidi.com/search/some-search-keywords 重写后URL //hqidi.com/search.php?p=some-search-keywords 重写规则    

nginx rewrite 实现URL跳转的方法

最近工作中常常要改nginx配置,学习了nginx中rewrite的用法 URL跳转 这里说的URL跳转就是用户在访问一个URL时将其跳转到另一个URL上. 常见的应用场景是让多个域名跳转到同一个URL上,(例如让旧域名跳转到新域名上) 将静态文件请求跳转到cdn上等 根据用户设备跳转到不同站点(pc版,wap版)等. URL跳转可以通过js在页面上设置的window.location实现 也可以通过php设置header来实现 当然也可以用nginx 的 rewrite功能实现 nginx r

详解nginx rewrite和根据url参数location

最近项目中涉及到旧老项目迁移,需要在nginx上做些配置,所以简单学习了下,好记性不如烂笔头,先记下来. rewrite 首先查看下nginx是否支持rewrite: ./nginx -V 不支持说明安装nginx时候缺少pcre,需要重新安装nginx: #安装pcre wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz tar -zxvf pcre-8.34.tar.gz cd pcre-8.

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

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

Nginx Rewrite使用场景及代码案例详解

Nginx Rewrite使用场景 1.URL地址跳转,例如用户访问pm.com将其跳转到baidu.com或者当用户通过http的方式访问时,将其跳转至https的方式访问. 2.URL伪静态,将动态页面显示为静态页面方式的一种技术,减少动态URL地址对外暴露过多的参数,提升更高的安全性. 3.搜索引擎SEO优化依赖于URL路径,以便支持搜索引擎录入 4.可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求. 配置语法 rewrite regex replacement [flag

详解nginx中location、rewrite用法总结

一.location用法总结 location可以把不同方式的请求,定位到不同的处理方式上. 1.location的用法 location ~* /js/.*/\.js 以 = 开头,表示精确匹配:如只匹配根目录结尾的请求,后面不能带任何字符串. 以^~ 开头,表示uri以某个常规字符串开头,不是正则匹配 以~ 开头,表示区分大小写的正则匹配; 以~* 开头,表示不区分大小写的正则匹配 以/ 开头,通用匹配, 如果没有其它匹配,任何请求都会匹配到 location的匹配顺序是"先匹配正则,再匹配

详解Nginx中的Rewrite的重定向配置与实践

一:理解地址重写 与 地址转发的含义. 地址重写与地址转发是两个不同的概念. 地址重写 是为了实现地址的标准化,比如我们可以在地址栏中中输入 www.baidu.com. 我们也可以输入 www.baidu.cn. 最后都会被重写到 www.baidu.com 上.浏览器的地址栏也会显示www.baidu.com. 地址转发:它是指在网络数据传输过程中数据分组到达路由器或桥接器后,该设备通过检查分组地址并将数据转发到最近的局域网的过程. 因此地址重写和地址转发有以下不同点: 1. 地址重写会改变

详解C# 中Session的用法

Session模型简介 在学习之前我们会疑惑,Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每 个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用 户的唯一身份.这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串,我们会在下面的实验中见到它的实际样子. 这个唯一的SessionID是有

详解C++中mutable的用法

代码编译运行环境:VS2017+Win32+Debug mutalbe的中文意思是"可变的,易变的",是constant(即C++中的const)的反义词.在C++中,mutable也是为了突破const的限制而设置的,被mutable修饰的变量将永远处于可变的状态. mutable的作用有两点: (1)保持常量对象中大部分数据成员仍然是"只读"的情况下,实现对个别数据成员的修改: (2)使类的const函数可以修改对象的mutable数据成员. 使用mutable

详解Nginx中的重定向功能

nginx 各参数翻译,作用 $arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值. $args #这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah; $binary_remote_addr #二进制的客户地址. $body_bytes_sent #响应时送出的body字节数数量.即使连接中断,这个数据也是精确的. $content_length #请求头中的Content-length字段. $content_typ

详解python中*号的用法

1.表示乘号 2.表示倍数,例如: def T(msg,time=1): print((msg+' ')*time) T('hi',3) 打印结果(打印3次): hi hi hi 3.单个 * (1).如:*parameter是用来接受任意多个参数并将其放在一个元组中. >>> def demo(*p): print(p) >>> demo(1,2,3) (1, 2, 3) (2).函数在调用多个参数时,在列表.元组.集合.字典及其他可迭代对象作为实参,并在前面加 *

详解JavaScript中return的用法

最近,跟身边学前端的朋友了解,有很多人对函数中的return的用法和意思理解的比较模糊,这里写一篇文章跟大家一起探讨一下return的用法. 1定义 return,从字面意思来看就是返回,官方定义return语句将终止当前函数并返回当前函数的值:可以看下下面的示例代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>

详解C++中的inline用法

1. 引入inline关键字的原因 在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数. 栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间. 在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭. 下面我们来看一个例子: #include <stdio.h> //函数定义为inline即:内联函数 inline char*

详解Matlab中 sort 函数用法

(1)B=sort(A) 对一维或二维数组进行升序排序,并返回排序后的数组,当A为二维时,对数组每一列进行排序. eg: A=[1,5,3],则sort(A)=[1,3,5] A=[1,5,3;2,4,1],则sort(A)=[1,4,1;2,5,3] (2)B=sort(A,dim),对数组按指定方向进行升序排序, dim =1,表示对每一列进行排序,,dim=2表示对每一行进行排序. (3)B=sort(A,dim,mode),mode为指定排序模式,mode为"ascend"时,