Nginx Rewrite规则
1.基础知识点
(1)rewirte规则也称为 规则重写,主要功能是实现浏览器访问http url的跳转,其正则表达式是基于perl语言。
(2)对收缩引擎优化(seo),利于收索引擎抓取网站页面。
(3)隐藏网站url真实地址。
(4)网站变更升级,可以基于rewrite临时重定向到其他页面。
(5)有利于服务器实现伪静态。
2.rewrite结尾表示符
(1)last:相当于apache里的(l)标记,表示完成rewrite匹配。(浏览器地址栏url地址不变)
(2)break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。(浏览器地址栏url地址不变)
(3)redirect:返回302临时重定向,浏览器地址栏会显示跳转后的url地址。
(4)permanent:返回301永久重定向,浏览器地址栏会显示跳转后的url地址。
3.rewrite规则常用表达式
(1) . 匹配任何单字符;
(2)? 匹配0到1个字符;只匹配一次;
(3)* 匹配0到多个字符;
(4)+ 匹配1到多个字符;
(5)[0-9] 匹配字符串0-9
(6)[^0-9] 不匹配字符串0-9
(7)^ 字符串开始标志
(8)$ 字符串结束标志
(9)\n 转义换行标志
4.nginx rewrite变量常用于匹配http请求头信息、浏览器主机名、url等。
5.rewrite配置在nginx的location块中;
(1)将dks.net跳转至www.dks.net
if($host='dks.net') { rewrite ^/(.*)$ http://www.dks.net/$1 permanent; }
# $host内置nginx变量,匹配用户访问的域名
# $1表示引用第一个括号的内容,是用户输入的内容;如果不使用$1引用,则只会匹配根(2)将访问www.dks.net跳转至www.test.com/new.index.html
rewrite ^/$ http://www.test.com/new.index.html permanent;(3)访问 /dks/test01/跳转至/newindex.html,浏览器地址不变
rewrite ^/dks/test01/$ /newindex.html last;(4)多域名跳转 www.dks.net
if($host!='www.dks.net') { rewrite ^/(.*)$ http://www.dks.net/$1 permanert; }(5)访问文件和目录不存在跳转至index.php
!-f 和 -f 判断文件
!-d 和 -d 判断目录
!-e 和 -e 判断文件和目录
!-x 和 -x 判断文件是否可执行
if(!-e $request filename) { rewrite ^/(.*) /index.php last; }(6)目录对换 /xxx/123456——> /xxx?id=123456
\d+ 代表匹配数字,相当于[0-9]
rewrite ^/(.+)/(\d+) /$1?id=$2 last;(7)判断浏览器user agent跳转
if($http_user_agent ~msie) { rewrite ^(.*)$/ie/$1 break; }(8)禁止访问以.sh | .flv | .mps为文件后缀的文件
location ~.*\.(sh|flv|mp3)$ { return 403; }(9)将移动用户访问跳动至移动端。
if($http_user_agent ~* "(android)|(iphone)|(mobile)|(wap)|(ucweb)") { rewrite ^/$ http://m.dks.net/ permanent; }(10)匹配url访问字符串跳转
if($args ~* tid=13) { return 404; }(11)访问/10690/dks/123 跳转至/index.php?tid/10690/items=123
rewrite ^/([0-9]+)/dks/(.+)$ /index.php?tid/$1/items=$2 last;
6.多rewrite规则跳转
rewrite ^/dks/(.*)/$ /newindex.html permanent; #可以跳转 rewrite ^/newindex.html$ /dks/test01/index.html permanent;rewrite ^/dks/(.*)/$ /newindex.html break; #break 终止跳转,执行下一条rewrite规则 rewrite ^/newindex.html$ /dks/test01/index.html permanent;rewrite ^/dks/(.*)/$ /newindex.html last; #last 跳转,但下面那条rewrite规则匹配不上,因为last使地址栏url地址不变,所以下面的那条rewrite规则匹配不上; rewrite ^/newindex.html$ /dks/test01/index.html permanent; #此条规则匹配不上上边的url地址