rewirte 规则
Nginx Rewrite
Rewirte 规则也称为规则重写,主要功能是实现浏览器访问 HTTP URL 的跳转,其正则
表达式是基于 Perl 语言。通常而言,几乎所有的 WEB 服务器均可以支持 URL 重写。Rewrite
URL 规则重写的用途:
对搜索引擎优化(Search Engine Optimization,SEO)友好,利于搜索引擎抓取网站页面;
隐藏网站 URL 真实地址,浏览器显示更加美观;
网站变更升级,可以基于 Rewrite 临时重定向到其他页面。
Nginx Rewrite 规则使用中有三个概念需要理解,分别是:Rewrite 结尾标识符、Rewrite
规则常用表达式、Nginx Rewrite 变量,如下为三个概念的详解:
(1) Nginx Rewrite 结尾标识符,用于 Rewrite 规则末尾,表示规则的执行属性。
last :相当于 Apache 里的(L)标记,表示完成 rewrite 匹配;
break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。
redirect:返回 302 临时重定向,浏览器地址会显示跳转后的 URL 地址。
permanent:返回 301 永久重定向,浏览器地址栏会显示跳转后的 URL 地址。
其中 last 和 break 用来实现 URL 重写时,浏览器地址栏 URL 地址不变。
2) Nginx Rewrite 规则常用表达式,主要用于匹配参数、字符串及过滤设置。
. |
匹配任何单字符; |
|
[word] |
匹配字符串:word; |
|
[^word] |
不匹配字符串:word; |
|
jfedu|jfteach |
可选择的字符串:jfedu|jfteach; |
|
? |
匹配 0 到 1 个字符; |
|
* |
匹配 0 到多个字符; |
|
+ |
匹配 1 到多个字符; |
|
^ |
字符串开始标志; |
|
$ |
字符串结束标志; |
|
\n |
转义符标志。 |
|
(3) |
Nginx Rewrite 变量,常用于匹配 HTTP 请求头信息、浏览器主机名、URL 等。 |
HTTP headers:HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_HOST,
HTTP_ACCEPT;
connection & request: REMOTE_ADDR, QUERY_STRING;
server internals: DOCUMENT_ROOT, SERVER_PORT, SERVER_PROTOCOL;
system stuff: TIME_YEAR, TIME_MON, TIME_DAY。
详解如下:
HTTP_USER_AGENT 用户使用的代理,例如浏览器;
HTTP_REFERER 告知服务器,从哪个页面来访问的;
HTTP_COOKIE 客户端缓存,主要用于存储用户名和密码等信息;
HTTP_HOST 匹配服务器 ServerName 域名;
HTTP_ACCEPT 客户端的浏览器支持的 MIME 类型;
REMOTE_ADDR 客户端的 IP 地址
QUERY_STRING URL 中访问的字符串;
DOCUMENT_ROOT 服务器发布目录;
SERVER_PORT 服务器端口;
SERVER_PROTOCOL 服务器端协议;
TIME_YEAR 年;
TIME_MON |
月; |
|
TIME_DAY |
日; |
|
(4) |
Nginx Rewrite 以下配置均配置在 nginx.conf 或者 vhosts.conf 中,企业中常用的 |
Nginx Rewrite 案例如下:
1. 将 baidu.com 跳转至 ww.baidu.com。
if ($host = 'jfedu.net' ) {
rewrite ^/(.*)$ ww.baidu.com permanent;
}
- 访问 www.baidu.com跳转 new_index.html。
rewrite ^/$ http://www.baidu.com/new_index.html permanent;
2.访问/baidu/test01/跳转至/newindex.html,浏览器地址不变。
rewrite ^/test01/$ http://www.baidu/newindex.htmil last;
3.多域名跳转到 www.baidu.com。
if ($host != ‘www.baidu.com’ ) {
rewrite ^/(.*)$ http://www.baidu.com/$1 permanent;
}
4. 访问文件和目录不存在跳转至 index.php。
if ( !-e $request_filename )
{
rewrite ^/(.*)$ /index.php last;
}
5.目录对换 /xxxx/123456 ====> /xxxx?id=123456。
rewrite ^/(.+)/(\d+) /$1?id=$2 last;
6.判断浏览器 User Agent 跳转。
if( $http_user_agent ~ MSIE)
{
rewrite ^(.*)$ /ie/$1 break;
}
7.禁止访问以.sh,.flv,.mp3 为文件后缀名的文件。
location ~ .*\.(sh|flv|mp3)$
{
return 403;
}
9.将移动用户访问跳转至移动端。
if ( $http_user_agent ~* "(Android)|(iPhone)|(Mobile)|(WAP)|(UCWEB)" )
{
rewrite ^/$ http://m.baidu.net/ permanent;
}
10. 匹配 URL 访问字符串跳转。
if ($args ~* tid=13) { return 404;
}
11.访问/10690/baidu/123 跳转至/index.php?tid/10690/items=123,[0-9]表示任意一个数字,+ 表示多个,(.+)表示任何多个字符。
rewrite ^/([0-9]+)/baidu/(.+)$ /index.php?tid/$1/items=$2 last;
转载于:https://www.cnblogs.com/linxizhifeng/p/6986318.html
rewirte 规则相关推荐
- 运维之道 | Nginx rewrite 规则详解
Nginx rewrite 规则详解 一.rewrite规则概念 rewirte 规则也称为规则重写,主要功能是实现浏览器访问 HTTP URL 的跳转,其正则表达式是基于 Perl 语言.通常而言, ...
- Nginx rewrite规则
目录: rewrite概念 rewrite示例 rewrite概念 Rewirte 规则也称为规则重写,主要功能是实现浏览器访问 HTTP URL 的跳转,其正则表达式是基于 Perl 语言.通常而言 ...
- Nginx_Rewrite规则配置
Rewirte规则也称为规则重写,主要功能是实现浏览器访问HTTP URL的跳转,其正则表达式是基于Perl语言.通常而言,几乎所有的WEB服务器均可以支持URL重写.Rewrite URL规则重写的 ...
- nginx中proxy_pass替换规则
nginx一个常用的功能就是作为反向代理服务器,涉及到的一个语法就是proxy_pass,作用是将匹配的请求转发到特定的后端服务器,但这个语法在转发过程中有可能会对请求的uri进行更改,下面我们就来说 ...
- nginx 实现Web应用程序的负载均衡
文章转载自 博客园, 原文地址 http://www.cnblogs.com/ivanyb/archive/2011/11/16/2250710.html 看到园子中的大牛代震军写的一篇玩玩负载均衡- ...
- 企业——nginx的图片压缩、https模块、重写规则、盗链
1.nginx实现图片的压缩 意义:一般单反拍出来的图片很大,当一个页面有很多图片,如果不将图片进行压缩处理,用户直接查看,这是很慢的,不利于用户的体验,所以,我们需要通过nginx的image_fi ...
- 运维工程师技术面试指导
目录 1. 自我介绍 2. 上家公司做什么业务的? 3. 可以说一下你上家公司某一个业务的架构吗? 4. 云计算项目: 5. 你上一家公司有多少台服务器 6. 用的是物理机还是云主机? 7. 上一家公 ...
- php多个域名301重定向到主域名代码,Nginx 301和apache重定向域名规则方法(多个域名,单个域名)...
实例:将所有topsem.com topsem.cn的域名都跳转到www.topsem.com这个域名,避免泛解析,有利于SEO server { listen 80; server_name *. ...
- Apache Rewrite规则详解[转]
1.Rewrite规则简介:Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式.如果要想用 ...
最新文章
- 好看的一本历史小说《大秦帝国》啊
- Vue.js指令实例
- 【视频】云信CTO阙杭宁:IM云开发经验分享
- 古月居ros课件_【古月居】ROS2探索总结系列
- 信息竞赛进阶指南--搜索相关(模板)
- 我的世界java村民繁殖_我的世界:Java19w08a更新,村民加强守卫,小狐狸背叛
- 2020-08-07
- mkisofs(genisoimage) 命令说明
- mysql log error_MySQL日志之error_log
- 高频面试题解析:给你任意指定生活中的一件物品,你会怎么测试?【考考你的思维】
- 纯CSS3实现兔斯基简单害羞表情
- c++实习岗面试经历
- pdf文件插入电子签名
- vue2实现电商后台管理的思路
- win11取消右键菜单折叠恢复经典传统菜单模式方法解决
- Python turtle绘制——癸卯(兔)年卯兔图
- EntityConnection ConnectionString
- STM32CubeIDE 利用LL库 SysTick简单实现hcsr04超声波测距
- msf ms17-010利用笔记
- ELLE风尚大典暨全球75周年庆典在成都环球中心举办
热门文章
- ASP.NET中文件上传下载方法集合
- 超全的Go Http路由框架性能比较
- 一种基于FPGA 的1080p 高清多摄像头全景视频拼接的泊车(机)
- 利用jmap和MAT等工具查看JVM运行时堆内存
- Linux下安装PHP7.1并做关联APACHE处理
- 《电子基础与维修工具核心教程》——1.3 弱电、强电、高压电
- 从windows上传文件到linux,中文名乱码解决方法
- C语言退出多层嵌套循环技巧
- MATLAB读取HDF格式的SST数据
- vue vue-cli3 修改elementui的date-picker源码 引入node_modules里的element-ui后报错exports is not defined...