我正在尝试在我的服务器的子域中安装CakePHP应用程序。我想进行高级安装,并将核心和app libs与webroot目录分开。
我将整个项目放在主目录的一个文件夹中,并将webroot目录的内容移动到子域的httpdocs目录。
然后,它看起来像:
子域-的httpdocs:
drwxrwxrwx 2 root root 4096 Mar 21 08:34 css
-rwxrwxrwx 1 root root 2760 Mar 21 08:34 css.php
-rwxrwxrwx 1 root root 374 Mar 21 08:34 favicon.ico
drwxrwxrwx 2 root root 4096 Mar 21 08:34 files
drwxrwxrwx 2 root root 4096 Mar 21 08:34 img
-rwxrwxrwx 1 root root 2731 Mar 21 08:43 index.php
drwxrwxrwx 2 root root 4096 Mar 21 08:34 js
-rwxrwxrwx 1 root root 3086 Mar 21 08:34 test.php
我编辑了index.php文件,并分别将ROOT和APPDIR常量更改为指向蛋糕架和app文件夹(在主目录中)。最后,我修改了.htaccess文件(3个文件),添加了指向app目录的RewriteBase参数(正如烹饪书中所说http://book.cakephp.org/view/917/Apache-and-mod_rewrite-and-htaccess)。
我检查过mod_rewrite是在apache中加载的,而且AllowOverride All是活动的,但它不起作用。它每次都响应HTTP 500。
如果我将整个项目放在httpdocs目录(包括webroot目录)中,它可以很好地工作。
你能帮我解决这个问题吗?
更新
我再次检查了它,如果所有目录都在httpdocs文件夹(核心和应用程序目录)中,它就可以工作。但是,它们不能在其他地方工作。
返回
Warning: include(cake/bootstrap.php) [function.include]: failed to open stream: No such file or directory in /var/www/vhosts/mydomain.com/subdomains/subscribers/httpdocs/apptest/webroot/index.php on line 83
Warning: include(cake/bootstrap.php) [function.include]: failed to open stream: No such file or directory in /var/www/vhosts/mydomain.com/subdomains/subscribers/httpdocs/apptest/webroot/index.php on line 83
Warning: include() [function.include]: Failed opening 'cake/bootstrap.php' for inclusion (include_path='/home/systemtest:/home/systemtest/app/:.:') in /var/www/vhosts/mydomain.com/subdomains/subscribers/httpdocs/apptest/webroot/index.php on line 83
提前致谢
答案 0 :(得分:0)
何
单独保留ROOT和APPDIR(在/app/index.php中),只需更改/app/webroot/index.php中的CAKE_CORE_INCLUDE_PATH
/**
* The absolute path to the "cake" directory, WITHOUT a trailing DS.
*
*/
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
define(
'CAKE_CORE_INCLUDE_PATH',
DS . 'usr' . DS .'share' . DS . 'cakephp' . DS . '1.3.6'
);
}
这将从共享源读取核心库。如果蛋糕无法设置,请将蛋糕核心源路径添加到php include路径中。
答案 1 :(得分:0)
我找到了解决方案:
在尝试不同的事情后,我发现问题出在网络服务器权限上。当app和cake文件夹位于httpdocs目录中时,应用程序运行正常但在将它们移动到另一个目录后,index.php返回了一个HTTP 500,表示在cake核心目录中打开文件失败。
解决方案是在子域的httpd.include文件中添加VirtualHost:
<VirtualHost xx.xx.xx.xxx.xx:80>
ServerName subdomain.mydomain.com
Alias /myapp /home/myapp/app/webroot
DocumentRoot /home/myapp/app/webroot
<Directory /home/myapp/app/webroot>
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
我认为我可以将app,cake和webroot目录分开并使用.htaccess管理安装,而不使用特定于apache的虚拟主机。
感谢Amy和Leo的帮助
答案 2 :(得分:0)
这可以通过不同的方式完成。 在php中可以打开哪些目录路径有一些限制。 PHP定义了open_basedir指令,后者又限制了 可以包含的文件。
在虚拟主机(例如您的情况)上,默认目录树包括
只有您的$_SERVER['DOCUMENT_ROOT']
和/tmp
目录,所以没有办法
如果它位于其他地方,你可以加入蛋糕核心。
一个干净而简单的解决方案是附加目录的绝对路径
你将在你的php.ini中存储蛋糕核心
之后,您只需将CAKE_CORE_INCLUDE_PATH
定义为点
在安装蛋糕核心的目录中。
这样就可以避免在httpd.conf中添加VirtualHost指令
对于您创建的每个应用程序,它在子域甚至域本身上运行。
希望这很有用。