如何在根域的子文件夹中运行CakePHP应用程序?

如何在根域的子文件夹中运行CakePHP应用程序?,php,.htaccess,cakephp,cakephp-2.4,Php,.htaccess,Cakephp,Cakephp 2.4,我试图在一个子文件夹中设置一个CakePHP应用程序,但从根域运行它,例如,用户请求domain.co.uk,他们从{DOCUMENT\u root}/version-13/app/webroot获取webroot 托管设置不允许我更改文档根目录,因此我在根目录中具有以下.htaccess: <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteRule ^$ version-13/app/we

我试图在一个子文件夹中设置一个CakePHP应用程序,但从根域运行它,例如,用户请求
domain.co.uk
,他们从
{DOCUMENT\u root}/version-13/app/webroot
获取webroot

托管设置不允许我更改文档根目录,因此我在根目录中具有以下.htaccess:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /
  RewriteRule    ^$ version-13/app/webroot/    [L]
  RewriteRule    (.*) version-13/app/webroot/$1 [L]
</IfModule>

重新启动发动机
重写基/
重写规则^$version-13/app/webroot/[L]
重写规则(*)版本-13/app/webroot/$1[L]
这似乎可以完成任务。但是,Cake检测到子文件夹并将其添加到它创建的所有URL中(例如,
$this->Form->create()
actions等),因此我最终将表单发布到
domain.co.uk/version-13/signup
,而不是
domain.co.uk/signup


我知道这可能很简单,但我遇到了麻烦。不管我怎么做,我都不能让它工作

很难理解您的设置,您应该进一步解释。但如果我没有弄错,请检查/app/Config/core.php:

Configure::write('App.fullBaseUrl', 'http://example.com');

将您的
RewriteBase/
更改为
RewriteBase/version-13/
(在.htaccess中),您应该可以立即进行设置

当我没有正确设置本地服务器时,我遇到了完全相同的问题,这迫使我将应用程序放在主域的文件夹中

请注意,您可以有。这对“版本控制”很有用


在谷歌快速搜索后,我发现了以下内容。我读得不太好,但看起来也一样

为什么要在不同的位置上传你的版本?你调查过了吗?例如:或者?我正在使用Git进行版本控制,这更适合于部署。我在这台主机上做的事情有限(并且没有VPS选项),所以我的想法是我可以
git archive master
,将新版本上传到一个单独的文件夹中,进行测试,然后切换路径以实现零停机升级。啊,好的。听起来很有创意:)谢谢,我尝试了你的建议(以及链接文章中的建议——我在这里发布之前就在那里!)。将RewriteBase设置为版本文件夹的工作原理是一样的-页面正确响应routes.php中的路由,但生成的URL(例如,表单URL)包括子文件夹(例如,
)。为什么不应该在表单中包括子文件夹?你想让它转到
/version-13/注册
对吗?否则它将成为
/signup
,如果我理解正确,它将不存在。
/signup
是我在routes.php中连接的路由-它是一个“漂亮的url”,因此我没有默认的
/{controller}/{action}
格式。如果站点不在子文件夹中,则使用
$this->form->create()
生成的任何表单都会发布到
/signup
。但是,在子文件夹中,我可以在
/signup
看到页面,但所有生成的URL都包含子文件夹。我希望该网站能够像没有子文件夹一样工作,并且像在根目录中一样工作。设置
Configure::write('App.baseUrl',/')成功了。设置此选项没有任何效果。但是,我注意到设置
Configure::write('App.baseUrl',/')没有。它现在可以按预期工作-所有生成的URL都没有版本文件夹前缀。谢谢