Linux-Nginx-Rewrite规则-1

对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,在对网站的路径重写时,匹配的过程是:
查看是否有匹配,如果不存在匹配,则直接执行。如果存在匹配,则执行匹配之后,再继续以新路径传递给服务器进行匹配。

你可能感兴趣的:(apache,nginx,rewrite)