Cakephp路由没有子目录名称

时间:2013-03-03 18:25:41

标签: cakephp

我正在开发CakePHP应用程序。当我将它上传到我的主机的public_html目录时,我已经为它创建了一个子目录。

所以现在的结构是这样的:domain.com/subdircake /.

我在public_html根目录中包含了一个.htaccess文件,我已经将webroot文件夹中的index.php更改为指向子目录。

由于错误的.htaccess配置,我不知道在cakeapp或mod_rewrite问题中是否存在路由问题,但会发生什么呢。

  1. 我可以访问该域,它会显示该应用的主页。
  2. 这些链接指向domain.com/subdircake/action而不是domain.com/action。
  3. 当我强迫网址为domain.com/action时,它会起作用,这让我感到压力,因为我不知道为什么。
  4. 所以我认为它必须是一些重写问题,但我没有任何线索。

    有人有任何想法吗?

4 个答案:

答案 0 :(得分:5)

前往domain.com/action的原因是您的.htaccess解决方案有效 - 它确实将URL重写到正确的位置。但是,CakePHP的路由系统并不知道您对默认重写脚本所做的更改,这会导致HTML Helper生成的链接仍然指向他们不用编辑.htaccess文件的位置。

首先想到的解决方案是更改App.base配置;在Config/bootstrap.php中,添加以下行:

Configure::write('App.base','/');

看看是否有帮助。我建议在更改设置后彻底测试网站,但许多CakePHP功能会使用它,结果可能会出乎意料。

答案 1 :(得分:0)

你使用userdir mod吗?

如果你这样做,你必须编辑3蛋糕.htaccess(位于你的蛋糕文件夹的根目录,你的应用程序/文件夹和你的app / webroot /文件夹中,然后添加其中一行RewriteEngine On行:

#.htaccess :
RewriteBase /~username/

#app/.htaccess :
RewriteBase /~username/app

#app/webroot/.htaccess :
RewriteBase /~username/app/webroot

用您的用户名替换用户名,但不要忘记〜

如果蛋糕文件夹位于子目录中,则为/~username/subdir/...

答案 2 :(得分:0)

webroot目录的内容放在public_html文件夹中。

然后更改index.php(在webroot / public_html中,而不是在cake的app目录中)以下行

if (!defined('ROOT')) {
    define('ROOT', 'subcakedir');
}

/**
 * The actual directory name for the "app".
 *
 */
if (!defined('APP_DIR')) {
    define('APP_DIR', 'app');
}

答案 3 :(得分:0)

Thiago Campezzi的答案非常有效,我对Kornel

也有同样的问题

Config/bootstrap.php中,添加以下行:

Configure::write('App.base','/');

我无法评论或投票,所以我在这里写了:)谢谢!!我搜索了几个小时的答案!

顺便说一句,这适用于.htaccess而没有它,因此每次将新版本的应用程序上传到网络服务器时都无需更改。