yaf 重写index.php,Yaf:nginx重写规则

try_files $uri $uri/ /index.php$is_args$args;

将这行代码放在server{}块里面即可。

解释一下含义:

首先是nginx的try_files指令,当一个请求发生时,比如"/abc",它会检查"/abc"($uri)文件是否存在以及"/abc/"($uri/)目录是否存在,如果不存在,则重定向到最后一个参数"/index.php$is_args$args".

我们知道index.php是框架的"入口文件"。

而$args是nginx内置变量,代表url中的query字符串,也就是get参数啦,像"a=1&b=2&c=3"。

$is_args取决于$args,用三元一次表达式表示:$is_args = empty($args)?‘‘:‘?‘;

这样一来,假设几个url,看看是如何重定向的:

/index/index  => /index.php

/admin/index?id=1  => /index.php?id=1

很奇怪是吗,重定向以后,路径都消失了,那么框架内部又如何路由呢?

答案是$_SERVER[‘REQUEST_URI‘](这里并不是唯一途径,框架还会考虑PATH_INFO以及IIS下有特殊处理,但是我们nginx和apache只要有request_uri就可以了),只需要知道一点:虽然nginx内部重定向了,但是REQUEST_URI参数是没有改变的,它代表的是原始的url,也就是浏览器地址栏中的url。

上面两个重定向发生后,实际上:

$_SERVER[‘REQUEST_URI‘]="/index/index";

$_SERVER[‘REQUEST_URI‘]="/admin/index?id=1";

之后框架会根据$_SERVER[‘REQUEST_URI‘]来路由解析。

最后附上我自己的一个配置:

server

{

listen 80;

server_name 你自己的域名;

index index.html index.htm index.php;

root /home/wwwroot/yaf;

try_files $uri $uri/ /index.php$is_args$args;

location ~ .*\.(php|php5)?$

{

fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_index index.php;

include fcgi.conf;

}

location /status {

stub_status on;

access_log off;

}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

{

expires 30d;

}

location ~ .*\.(js|css)?$

{

expires 12h;

}

access_log /home/wwwlogs/access.log access;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值