NGINX,Yii配置rest路由风格配置

原创
2014/07/03 14:27
阅读数 458

这个不是很麻烦的事情,毕竟Yii已经做了所有的路由的相关事情,我们只需要配置一下路由规则和nginx就可以了,这里介绍三种nginx配置方案,其实不止Yii,大多数的php框架都可以这样配置

方案一

(这个是网上最多的解决方案,yaf官方推荐的,不多赘余,这里就一笔带过)

if (!-e $request_filename) {
    rewrite ^/path/(.*)  /path/index.php/$1 last;
}

判断请求的文件是否存在,然后就rewrite给index.php 需要配置nginx的pathinfo的支持这样可能带来一点点效率问题,和安全问题(http://www.laruence.com/2010/05/20/1495.html)

方案二

rewrite参数传递路由

location /sampleapp {
      rewrite ^/sampleapp/(.*)$ /sampleapp/index.php?r=$1;
 }

这是nginx推荐的yii配置,大家可以移步 http://wiki.nginx.org/Yii

这也是我刚开始最喜欢的配置方式,但却有一个问题 

如果你配置yii rule array('login'=>'account/login')

然后访问 http://host/sampleapp/login 却惊奇的发现是一个404,关于这个问题我查看yii代码后,提交了一个pull request https://github.com/yiisoft/yii/pull/3423 以修改此问题 不过没有采纳

所以下面我就要隆重推出方案三了,这个方法会有一些局限,但我认为比较安全的;

方案三

location ~ \.php$ {
     deny all;
}

location ^~ /apppath {
     fastcgi_pass unix:/var/run/php5-fpm.sock;     
     include fastcgi_params;
     fastcgi_param SCRIPT_FILENAME $document_root/apppath/index.php;  }

location ~ ^/apppath/(protected|framework|nbproject){
     deny all;
}

location ^~ /apppath/assets/ {
     access_log off;
     expires 24h;
}

这里需要注意的是不可以设置

fastcgi_index index.php;

会让yii "误解"路径

方案三这里是完整的版本,把路径下所有的请求都转给index.php处理,然后禁止.php后缀访问(可以有效防止webshell) 

第三种配置方案目前还没有发现什么问题,我也推荐生产环境使用,喜欢大家如果能够发现有什么问题,能够@我一下好修复,谢谢



展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部