您的位置:首页 > 运维架构 > Nginx

Linux-Nginx-Rewrite规则-1

2015-06-15 22:51 726 查看
对rewrite来说,正则匹配不会包括hostname以及query string;
这样实现的规则其实就类似于:
rewrite ^/index/([\d+])/(.*).html$ /index.php?atype=$2&user=$1 last


我们来做一个测试

下面是我nginx中的基本配置:

location / {
root   html;
index  index.php index.html index.htm;
}


修改一下WebServer的路由规则,添加下面的几条规则:

rewrite ^/index/$      /index.html  last;


忘记如何重启nginx和fastcgi了,记录一下

sbin/nginx -h
spawn-fcgi
输入这2个就会显示提示信息,按要求写就行了


测试结果:

http://192.168.187.129:8080/index/


:页面跳转到了index.html

上面的都是应该都懂,介绍是想测试一下自己的环境是不是正常,下面是正式的测试例子,添加如下路由规则:

rewrite ^/index/$ /index.html/ last;
rewrite ^/index.html/$ /index.php last;


现象就是:

http://192.168.187.129:8080/index/


这个地址栏跳转的还是index.php,加了last之后还是继续匹配了下一条的重写规则

结论:last并没有结束一行匹配,不继续执行的意思。


下面验证这个情况:

上面的情况,先匹配了/index/,然后跳转到/index.html/,
然后继续跳转到index.php,但是并没有考虑到循环的情况,
存不存在匹配了之后继续从第一个继续匹配了,试一下。


修改一下规则:

rewrite ^/index$    /index.php last;
rewrite ^/index/$ /index.html/ last;
rewrite ^/index.html/$ /index last;


搞不懂,访问http://192.168.187.129:8080/index/居然出现了index.php的效果。


无论是Apache,还是Nginx,在对网站的路径重写时,匹配的过程是:

查看是否有匹配,如果不存在匹配,则直接执行。如果存在匹配,则执行匹配之后,再继续以新路径传递给服务器进行匹配。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx rewrite apache