本文利用Nginx实现URL重写,本文使用Nginx与静态页面配合重写URL。

1.准备工作。

结合本文场景,需要安装Nginx。

1.1 关于Linux系统安装Nginx可以参考我的文章---(传送门)。

2.什么是URL重写?

URL重写是指将一个URL请求重新写成网站可以处理的另一个URL的过程。这样说可能不是很好理解,举个例子来说明一下,在开发中可能经常遇到这样的需求,比如通过浏览器请求的http://localhost:8080/getUser?id=1,但是需要通过SEO优化等等原因,需要把请求的地址重写为http://localhost:8080/getUser/1这样的URL,从而符合需求或者更好的被网站阅读。

当遇到这种请求的时候,就需要使用到UrlRewrite重写或者使用一些网关路由,如SpringCloud的Gateway,Zuul,又或者是Nginx来实现这个功能。

本文介绍Nginx实现URL重写。

3.使用介绍

在Nginx中使用URL重写需要使用到一个指令-----rewrite,其语法如下:

rewrite regex replacement [flag];
复制代码
  • regex :可以使用正则或者字符串来表示相匹配的地址。
  • replacement:可以表示重定向的地址。
  • flag :flag标志的作用是用于控制当匹配到对应的rewrite规则后是否继续检查后续的rewrite规则。

flag值为如下四种,分别是:

  • last:停止处理当前的rewrite指令集,而后通过重写后的规则重新发起请求,浏览器地址栏URL地址不变。
  • break:和break指令一样,都是停止处理当前上下文中的其他重写模块指令。
  • redirect:如果替换字符串不以“ http://”,“ https://”或“ $scheme” 开头,返回带有302代码的临时重定向,浏览器地址会显示跳转后的URL地址。
  • permanent:返回301代码的永久重定向,浏览器地址栏会显示跳转后的URL地址。

例如:

server {...rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;return  403;...
}
复制代码

另外还可以根据if来判断,指令如下:

if (condition) { ... }
复制代码

其中condition是条件,如果为true,则执行大括号中的内容:

  • 使用“ =”和“ !=”运算符比较变量和字符串;
  • 使用“ ~”(对于区分大小写的匹配)和“ ~”(对于不区分大小写的匹配)运算符,将变量与正则表达式进行匹配。正则表达式可以包含可供以后在$1.. $9变量中重用的捕获。负操作符“ !~”和“ !~”也可用。如果正则表达式包含“ }”或“ ;”字符,则整个表达式应包含在单引号或双引号中。
  • 使用“ -f”和“ !-f”运算符检查文件是否存在;
  • 使用“ -d”和“ !-d”运算符检查目录是否存在;
  • 使用“ -e”和“ !-e”运算符检查文件,目录或符号链接是否存在;
  • 使用“ -x”和“ !-x”运算符检查可执行文件。

例如:

if ($http_user_agent ~ MSIE) {rewrite ^(.*)$ /msie/$1 break;
}if ($http_cookie ~* "id=([^;]+)(?:;|$)") {set $id $1;
}if ($request_method = POST) {return 405;
}if ($slow) {limit_rate 10k;
}if ($invalid_referer) {return 403;
}
复制代码

4.Nginx配置

本文例子只是将请求跳转到本人的博客首页http://www.dalaoyang.cn/,配置如下:

worker_processes  1;events {worker_connections  1024;
}http {server {listen       10000;server_name  localhost;#如果host不是dalaoyang.cn,则301到www.dalaoyang.cn中if ( $host != "dalaoyang.cn" ){rewrite ^/(.*)$ https://www.dalaoyang.cn/$1 last;}}}
复制代码

5.测试

测试就比较简单了,在浏览器访问http://localhost:10000/about,会自动跳转到https://www.dalaoyang.cn/about,如图所示。

6.总结

大部分内容都是参考自Nginx官网来学习的,官网的例子都很详细。

参考自Nginx官网ngx_http_rewrite_module模块官方API---传送门。

Nginx实现URL重写相关推荐

  1. Cento7+Nginx 之 URL重写

    Cento7+Nginx  之  URL重写 我们前一篇文章写了一个Cento7+Nginx 反向代理实现多域名跳转,今天主要介绍一下Cento7+Nginx  之  URL重写, Hostname: ...

  2. Nginx之URL重写

    1.URL重写模块(Rewrite) 摘要 这个模块允许使用正则表达式重写URI(需PCRE库),并且可以根据相关变量重定向和选择不同的配置.如果这个指令在server字段中指定,那么将在被请求的lo ...

  3. nginx配置url重写

    url重写是指通过配置conf文件,以让网站的url中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态.301重定向.浏览器定向等 rewrite 语法 在配置文件的server块中写,如: s ...

  4. nginx的url重写[rewrite规则和参考]

    本日志内容来自互联网和平日使用经验,整理一下方便日后参考. Nginx Rewrite 相关指令有 if.rewrite.set.return 等. if 的语法 应用于 server 和 locat ...

  5. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(1)

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  6. Nginx 反向代理、负载均衡、页面缓存、URL重写、读写分离及简单双机热备详解...

    大纲 一.前言 二.环境准备 三.安装与配置Nginx  (windows下nginx安装.配置与使用) 四.Nginx之反向代理 五.Nginx之负载均衡  (负载均衡算法:nginx负载算法 up ...

  7. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    标签:读写分离 页面缓存 URL重写 Nginx 反向代理 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeloda.bl ...

  8. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解【转载】

    本文只为备份,以防失效.原文请看https://blog.51cto.com/freeloda/1288553 补充说明:部分图片为测试图片,未完全复制,参考文字描述即可. Nginx 反向代理.负载 ...

  9. Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

最新文章

  1. php读取binlog,PHP解析Mysql Binlog
  2. 分享Kali Linux 2016.2第47周虚拟机
  3. 链接器(linker)的作用——CSAPP第7章读书笔记
  4. 限流10万QPS、跨域、过滤器、令牌桶算法-网关Gateway内容都在这儿
  5. 非标自动化企业前十名_非标设备的现状
  6. 【机器学习】用摸鱼学来解释隐马尔可夫模型(HMM)
  7. SAP UI5和微信小程序对比之我见
  8. 漫画:什么是人工智能
  9. 从M2M迁移到IIoT工业物联网
  10. 迷宫(信息学奥赛一本通-T1215)
  11. 盲人编程_帮助盲人学习编码
  12. do while(false)实用技巧
  13. 硬件电路设计之电平转换芯片SN74LVC4245A
  14. 人脸识别 (4) 人脸对齐
  15. R代码模拟世界杯1000次,速成2018世界杯预言帝
  16. 了解区块链(一)——加密货币以及区块链的价值
  17. ASP.NET程序设计复习题
  18. 真机测试无法验证应用
  19. java计算机毕业设计体育用品购物系统源程序+mysql+系统+lw文档+远程调试
  20. 罗胖怎么做知识服务?

热门文章

  1. Docker基础5--3.1docker镜像的操作
  2. 网络诊断“您可能需要与该网络的Internet服务提供商ISP签署协议才能获得访问Internet的权限
  3. python实现基本的矩阵运算
  4. Smali 语法解析——Hello World
  5. 7Z010 引脚功能详解
  6. 【OpenGL】高级片段着色器——在片段着色器中生成图像数据茹利亚集Julia set
  7. 《大咖说开源第二季》一、二期
  8. 商品模块的整理_sku属性_ElaticSearch查询
  9. 回音消除、噪音抑制技术相关知识
  10. 为什么stm32有的外设在进行初始化的时候需要将寄存器重设为缺省值?不设置会怎么样?...