1

我正在开发一个 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. 当我强制将 url 设置为 domain.com/action 时,它可以工作,这让我感到压力很大,因为我不知道为什么。

所以我认为这必须是一些重写问题,但我没有任何线索。

有人知道吗?

4

4 回答 4

5

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

想到的第一个解决方案是更改App.base配置;在 中Config/bootstrap.php,添加这一行:

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

看看这是否有帮助。不过,我建议在更改该设置后彻底测试该站点 - 许多 CakePHP 功能都使用它,结果可能出乎意料。

于 2013-03-03T22:39:52.727 回答
0

你使用 userdir mod 吗?

如果这样做,您必须编辑 3 cake .htaccess(位于 cake 文件夹的根目录、app/ 文件夹和 app/webroot/ 文件夹中,并在该行之后添加以下行之一RewriteEngine On

#.htaccess :
RewriteBase /~username/

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

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

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

如果您的蛋糕文件夹位于子目录中,它将是/~username/subdir/...

于 2013-03-03T22:28:47.007 回答
0

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

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

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

/**
 * The actual directory name for the "app".
 *
 */
if (!defined('APP_DIR')) {
    define('APP_DIR', 'app');
}
于 2013-03-07T14:15:25.177 回答
0

Thiago Campezzi的回答完美,我对Kornel有完全相同的问题

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

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

我还不能评论或投票,所以我在这里写了:)谢谢!我搜索了几个小时来寻找这个答案!

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

于 2013-10-02T08:34:52.410 回答