频道栏目
首页 > 资讯 > Linux > 正文

举例说明nginx的rewrite用法

18-04-21        来源:[db:作者]  
收藏   我要投稿

地址重写可以达到目的:

缩短URL,隐藏实际路径提高安全性

易于用户记忆和键入

易于被搜索引擎收录

常见网站应用场景:

1. 网站文件移动或文件目录名称改变,出于SEO需要,你需要保持旧的URL

 

规则:

rewrite regex replacement flag

- flag : break, last, redirect, permanent

last : 停止当前这个请求,并根据rewrite匹配的规则重新发起一个请求。新请求又从第一个阶段执行。。。

break: 相对last, break并不会重新发起一个请求,只是跳过当前的rewrite阶段,并执行本请求后续的执行阶段

redirect :302临时重定向,地址栏改变,爬虫不更新URI

permanent: 301永久重定向,地址栏改变,爬虫更新URI

下面重点说下 last 和 break 的区别,并做个小实验

编辑/usr/local/nginx/conf/nginx.conf

location /break/ {

rewrite ^/break/(.*) /test/$1 break;

return 402;

}

location /last/ {

rewrite ^/last/(.*) /test/$1 last;

return 403;

}

location /test/ {

return 508;

}

请求 tpl01.liang.com/break/break.html

返回 404; //如果存在 /test/break.html页面则 返回200

请求 tpl01.liang.com/last/last.html

返回 508 //不管存不存在 /test/last.html 都是返回508

原因分析: break 与last都停止后续rewrite指令集,不同之处在于last会重新发起新的请求并重新匹配location, 而break不会

rewrite regex replacement flag

正则表达式匹配模式如下:

区分大小写匹配: ~

不分区大小写匹配: ~*

区分大小写不匹配: !~

不区分大小写不匹配: !~*

匹配模式如下:

-判断文件是否存在: -f

-判断目录是否存在:-d

-判断文件是否可执行: -x

-判断文件,目录,连接是否存在: -e

应用案例

例子一: *.jpg或*.gif --> logo.png

location /{

root html;

index index.html index.htm;

rewrite \.(gif|jpg)$ /logo.png;

}

例子二:域名跳转

tpl01.liang.com --> tpl02.liang.com

server {

listen 80;

server_name tpl01.liang.com;

location /{

root html;

index index.html index.htm;

rewrite ^/ http://tpl02.liang.com/;

}

}

例子三: 根据浏览器返回不同的页面

server {

listen 80;

server_name tpl01.liang.com

location /{

root html;

index.html index.htm;

if($http_user_agent ~MSIE){

rewrite ^(.*)$ /nginx-ie/$1 break;

}

}

}

例子四: 访问资源不存在时,重定向到指定页面

if(!-e $request_filename){

rewrite ^/ http://tpl01.liang.com/none.html;

}

 

相关TAG标签
上一篇:ansible roles的作用
下一篇:H3C交换机配置telnet教程
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站