一、 Rewrite 基本描述
rewrite 主要实现 url 地址重写,以及重定向。 使用场景-
URL 访问跳转: 支持开发设计,页面跳转,兼容性支持
-
SEO 优化: 依赖于url路径,以便支持搜索引擎录入
-
维护: 后台维护,流量转发等
-
安全: 伪静态,真实动态页面进行伪装
二、 Rewrite 配置语法
Syntax: rewrite regex replacement [flag]; Default: -- Context: server, location, if
rewrite ^(.*)$ /pages/maintain.html break; // 所有请求转发至 /pages/maintain.html break; 2.1 正则表达式
表达式 | |
. | 匹配除换行符以外的任意字符 |
? | 重复0次或1次 |
+ | 重复1次或更多次 |
* | 任意次数 |
\d | 匹配数字 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结尾 |
{n} | 重复n次 |
{n+} | 重复n次或更多次 |
2.2 正则表达式中的特殊字符
\ : 转义字符 rewrite index.php$ /pages/index.php break; () :用于匹配括号之间的内容,通过 $1、$2调用 if ($http_user_agent ~ Chrome) { rewrite ^(.*)$ /chrome/$1 break; } --> 实现效果: http://localhost/test001.html --> http://localhost/chrome/test001.html
2.3 正则表达式终端测试工具
# yum install -y pcre-tools # pcretest re> /(\d+)\.(\d+)\.(\d+)\.(\d+)/ data> 192.168.10.19 0: 192.168.10.19 1: 192 2: 168 3: 10 4: 19
三、 Rewrite 标记Flag
flag | |
last | 停止rewrite检测 |
break | 停止rewrite检测 |
redirect | 返回302临时重定向,地址栏会显示跳转后的地址 |
permanent | 返回301永久重定向,地址栏会显示跳转后的地址 |
3.1 对比flag中 break 与 last
last 会新建立一个请求,请求域名+/testbreak 匹配后不会进行匹配,会查找对应的root站点目录下包含 /test 目录
server { listen 80; server_name localhost; root /soft/code; location ~ ^/break { rewrite ^/break /test/ break; } location ~ ^/last { rewrite ^/last /test/ last; } location /test/ { default_type applicaiton/json; return 200 '{"status":"success"}'; } }
3.2 比对flag中 redirect 与 permanent permanent 跳转,在关闭掉Nginx服务器后,浏览器依旧可以跳转,但清除缓存后,不能跳转
server { listen 80; server_name localhost; root /soft/code; location ~ ^/px { rewrite ^/px http://king.bearpx.com redirect; rewrite ^/px http://king.bearpx.com permanent; } }
四、 Rewtire使用场景
当对外展示URI时,需要隐藏真实目录结构server { listen 80; server_name localhost; root /soft/code; index index.html; location / { rewrite ^/px-(\d+)-(\d+)\.html /px/$1/px_$2.html break; } }
当Chrome浏览器访问/px时,直接跳转到 index.html;
server { if($http_user_agent ~* Chrome){ rewrite ^/px http://px.bearpx.com/index.html redirect; } }
五、Rewrite 匹配优先级
- 执行server块的 rewrite指令
- 执行location匹配
- 执行选定的location中的rewrite
server { listen 80; server_name www.bearpx.com bearpx.com; if ($http_host = nginx.org){ rewrite (.*) http://www.bearpx.com$1; } } // 改进写法 server { listen 80; server_name www.bearpx.com bearpx.com; rewrite ^ http://www.bearpx.com$request_uri?; } --> 实现效果 bearpx.com/bear/bear.html --> http://www.bearpx.com/bear/bear.html
标签:http,rewrite,08,Rewrite,server,break,Nginx,html,bearpx From: https://www.cnblogs.com/kingdomer/p/13938229.html