注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

勇气

终生读书

 
 
 

日志

 
 

【转载】CakePHP:链接地址问题(不用mod_rewrite,IIS)  

2015-04-27 15:37:46|  分类: cakephp |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

实现的友好的urls,固然很好,但是有些场合因为服务器的原因等,我们无法使用重写规则,特别是当我们用CakePHP开发应用产品的时候,必须考虑到用户不同的部署环境,所以必须考虑到不用urls重写,网站的链接地址方式。CakePHP的官方文档等默认的都是支持Url重写,强调一个约定环境,约定目录,而实际生产环境于此不同,又不受控制。笔者在用CakePHP开发一个应用,部署时发现环境不支持Url重写,不得不回过头来修改代码,将其中遇到的问题,发现这方面的资料很少,所以总结了一下,与大家一起探讨。

实际链接地址

/index.php?url=controllername/actionname/param,调试时常常用到

要实现不同环境的部署,网站的所有链接地址要使用Helper的HTML助手的link、url方法,不要直接写地址,这是刚开使用框架是最容易忽略的问题,等程序开发完了,再回来修改,还是很费精力的。

不支持url重写的配置

/app/config/core.php取消对其注释

Configure::write('App.baseUrl', env('SCRIPT_NAME'));

删除

/.htaccess/app/.htaccess/app/webroot/.htaccess

链接地址由 www.example.com/controllername/actionname/para 变为

www.example.com/index.php/controllername/actionname/param

问题:

www.example.com/index.php/controllername/actionname/param的模式会报告404错误,无法找到文件,修改为index.php?controllername/actionname/param可以实现访问,那么实现 index.php/controllername访问,是需要配置web服务器、PHP、CakePHP,还是就是CakePHP bug,应该生成的是index.php?controllername,官方文档没有发现有关此的任何信息,像是这个问题根本就不存在一样,这不是个问题吗?我对Url,参数传递知道的太少了吗?都是用?传递参数,搜索了也没有找到想要的说明。(后来试验发现,Apache可以使用/传递参数可以实现访问,我这里用的是IIS5.0服务器),所以CakePHP对于IIS的支持存在bug,跟踪html->url()方法:

cake/libs/router.php第857行(/lib/cake/Routing/router.php 2.X版本)

$output = str_repla

ce('//', '/', $base . '/' . $output);

修改为

$output = str_replace('//', '/', $base . '?' . $output);

目录设置问题

├─web_root 根目录│ └─应用目录│├─应用目录│ └─app 应用目录└─cake cake目录

按文档进行配置webroot/应用目录/index.php

if (!defined('ROOT')) {define('ROOT', dirname(dirname(dirname(__FILE__))).DS.'应用目录');}if (!defined('APP_DIR')) {define('APP_DIR', 'app');}

问题:CSS、img等路径出现问题,页面无法正常访问

跟踪源码,这里设置

cake/dispatcher.php

if (strpos($this->webroot, $dir) === false) { $this->webroot .= $dir . '/' ;//$dir=APP_DIR}

解决:

去掉应用目录的app层,修改

if (!defined('APP_DIR')) { define('APP_DIR', '/');}

  评论这张
 
阅读(98)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017