Nginx的rewrite(地址重定向)剖析
1、rewrite语法:
指令语法:rewrite regex replacement[flag];
默认值:none
应用位置:server、location、if
rewrite是实现URL重定向的重要指令,他根据regex(正则表达式)来匹配内容跳转到replacement,结尾是flag标记
简单的小例子:
1 |
rewrite ^/(.*) http://www.baidu.com/ permanent; # 匹配成功后跳转到百度,执行永久301跳转 |
---|
常用正则表达式:
字符 |
描述 |
---|---|
将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用 |
|
^ |
匹配输入字符串的起始位置 |
$ |
匹配输入字符串的结束位置 |
* |
匹配前面的字符零次或者多次 |
+ |
匹配前面字符串一次或者多次 |
? |
匹配前面字符串的零次或者一次 |
. |
匹配除“n”之外的所有单个字符 |
(pattern) |
匹配括号内的pattern |
rewrite 最后一项flag参数:
标记符号 |
说明 |
---|---|
last |
本条规则匹配完成后继续向下匹配新的location URI规则 |
break |
本条规则匹配完成后终止,不在匹配任何规则 |
redirect |
返回302临时重定向 |
permanent |
返回301永久重定向 |
2、应用场景:
- 调整用户浏览的URL,看起来规范
- 为了让搜索引擎收录网站内容,让用户体验更好
- 网站更换新域名后
- 根据特殊的变量、目录、客户端信息进行跳转
3、常用301跳转:
之前我们通过用起别名的方式做到了不同地址访问同一个虚拟主机的资源,现在我们可以用一个更好的方式做到这一点,那就是跳转的方法
还是用www.brian.com虚拟主机为例子,修改配置文件brian.conf:
[root@Nginx www_date]# cat brian.conf
server { # 添加个server区块做跳转
listen 80;
server_name brian.com;
rewrite ^/(.*) http://www.brian.com/$1 permanent;
}
server {
listen 80;
server_name www.brian.com;
location / {
root html/brian;
index index.html index.htm;
}
access_log logs/brian.log main gzip buffer=128k flush=5s;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
检查语法:
[root@Nginx conf]#
[root@Nginx conf]# ../sbin/nginx -t
nginx: the configuration file /opt/nginx//conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx//conf/nginx.conf test is successful
平滑重启:
1 |
[root@Nginx conf]# ../sbin/nginx -s reload |
---|
windows测试效果:
4、域名跳转:
我们不仅可以做相同虚拟主机的资源域名跳转,也能做不同虚拟主机的域名跳转,我们下面就跳转下当访问brian.com域名的时候跳转到www.baidu.com的页面:
修改www.brian.com虚拟主机的brian.conf配置文件:
[root@Nginx www_date]# cat brian.conf
server {
listen 80;
server_name brian.com;
location / {
root html/brian;
index index.html index.htm;
}
if ( $http_host ~* "^(.*)") {
set $domain $1;
rewrite ^(.*) http://www.baidu.com break;
}
access_log logs/brian.log main gzip buffer=128k flush=5s;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
windows测试:(访问brian.com 跳转到了www.baidu.com)
朱敬志(brian),成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。
- Flash在线拍摄用户头象
- win7 64位下如何折腾Tubro C 3.0
- TweenLite的又一应用:图片的拼图加载效果
- mysql创建数据表时如何判断是否已经存在?
- 温故知新:接口的隐式实现与显式实现
- 也谈枚举ToString()性能的改进
- silverlight:利用telerik中的zip类对字符串进行压缩、解压
- 索引,视图,存储过程和触发器文档
- 重点解读:用小程序给公众号涨粉10w的7大行业案例
- 网络域名与注册商标冲突的解决途径
- 网站代码优化我们必须要做的那些事
- 真是热闹! Slade.com等多个域名被曝交易
- python编码问题之"encode"&"decode"
- python3编码问题终结者--还搞不懂你来找我
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【LeetCode】重建二叉树day04
- 【LeetCode】从尾到头反过来返回每个节点的值(用数组返回)day03
- mybatis文件映射之利用association进行关联查询(二)
- 【JUC】CountDownLatch你真的了解吗?
- mybatis动态sql之foreach补充(一)
- 【LeetCode】把字符串 s 中的每个空格替换成““%20””day02
- bert加载数据代码
- python爬虫--看看虎牙女主播中谁颜值最高
- 基于maven+ssm的增删改查之maven环境的搭建
- (22)Bash环境变量
- maven之在eclipse中创建maven项目
- wiki百科之将词转换为索引表示
- 【LeetCode】找出数组中重复的数字day01
- pytorch实现的transformer代码分析
- 终于搞懂HashMap的源码了!!!