Cakephp应用程序在ec2上显示错误的路径

时间:2013-08-29 12:56:06

标签: php css cakephp path amazon-ec2

我在文件夹名称FC下有一个cakephp项目,其中包含我在ec2上的ubuntu实例上传的app文件夹,index.php等。当我上传文件夹时,它显示索引文件夹,所以我将FC下的内容直接上传到www文件夹中,这样就可以自动获取index.php文件了。现在网站开始显示,但没有CSS或图像或js。我查看了错误日志,它显示了这个:

[Wed Aug 28 14:15:56 2013] [错误] [客户端xxxxxxxxxxxxxxxxx]文件不存在:/ var / www / js,referer:http://xxxxxxxxxxxxxxxxxxxxxxxx.compute.amazonaws.com/

[Wed Aug 28 14:15:56 2013] [错误] [客户端xxxxxxxxxxxxxxxxx]文件不存在:/ var / www / js,referer:http://xxxxxxxxxxxxxxxxxxxxxxxx.compute.amazonaws.com/

显然,这表明路径设置不正确。现在我给我的js和图像的路径是在webroot文件夹中,所以我的图像在img文件夹中,js在webroot下的js文件夹中,所以路径我只提供“filename.whatever”,并且在localhost上运行正常。 我如何设置路径以便指向正确的位置?当我检查一个拙劣的图像上的元素时,它显示路径/img/xxxx.jpg。这意味着cake会自动进入image / js / css文件夹,这就是我的代码在本地机器上工作的方式。现在当我手动给出路径时,比如/www/app/webroot/img/xxx.jpg,它就像这样:img / www / app / ...等。请帮忙!是否有关于此的文件或者之前有人这样做过吗?

EDITED: 的根目录/ index.php的:

if (!defined('DS')) {
    define('DS', DIRECTORY_SEPARATOR);
} 

define('ROOT', '/var/www/FC');   

define('APP_DIR', 'app');

define('CAKE_CORE_INCLUDE_PATH', DS . 'var' . DS . 'www' . DS . 'FC' . DS . 'lib');

以下这是INDEX.PHP的标准内容,它不写更改

站点可用/默认值:

  <VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/FC/app/webroot
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /var/www>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride All
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride All
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

顺便说一句,我的Index.ctp重定向到位于LocationsController中的多个链接,包括index.ctp,而cake正试图找到FCController。我是否需要将locationscont重命名为FCcont以匹配约定?

* 我刚刚发现,视图和控制器等内的网址都是这样的'/FC/locations/...etc'。我是否需要从基本路径提供网址,即'/ var / www / FC ...'?? *

2 个答案:

答案 0 :(得分:0)

如果您正在使用Apache,则默认情况下,您可公开访问的文件夹为/var/www/

以下说明将以最简单的方式更改纪录片和设置蛋糕。

在准备好所有内容时,出于安全原因首先停止您的Apache服务器。

sudo service apache2 stop

然后在/var/www/myproject中复制您的项目。这意味着您将能够在/var/www/myproject/app/webroot中找到此webroot。当然myproject可以是您想要的任何文件夹,如果您更改它,只需在所有命令中保持相同。

您需要告诉应用程序在哪里找到cakePHP:

nano /var/www/myproject/app/webroot/index.php

转到以define('CAKE_CORE_INCLUDE_PATH'开头的行并将其设为define('CAKE_CORE_INCLUDE_PATH', DS . 'var' . DS . 'www' . DS . myproject . DS . cakephp . DS . lib') - 假设cakephp/lib中有/var/www/myproject/cakephp/lib,或者根据需要进行修改。

然后告诉apache新文档的根目录是什么:

sudo nano /etc/apache2/sites-available/default

并且无论您在何处/var/www将其更改为/var/www/myproject/app/webroot

为了确保Web服务(apache)可以访问您的文件并写入缓存,请执行以下命令:

sudo chown www-data:www-data /var/www/myproject -R
sudo chmod 777 /var/www/myproject/tmp -R

最后再次启动你的apache:

sudo service apache2 start

如果你现在转到http://xxx.compute.amazonaws.com/,一切都应该有用。

如果您没有看到应用CSS,则需要启用重写模块:

sudo a2enmod rewrite && sudo service apache2 restart

答案 1 :(得分:0)

我解决了这个问题。这是因为在我的代码中,前一个用户创建了一个控制器文件Locationscontroller.php,并指定了这样的URL:

<form id ="0" action="/FC/locations/confirm_final">

这是我的本地机器中的localhost,其中基本文件夹是htdocs我必须键入localhost / FC /来访问index.php。 很自然因为在EC2上我把FC本身作为我的基本文件夹,它试图访问其中不存在的另一个FC。 / XXX / locations /表示它搜索“XXX”控制器,然后搜索其中的位置。由于我的控制器是Locations,它一直出错。

我一改成它:

<form id ="0" action="/locations/confirm_final">

它指向正确的控制器,它是位置。 这都是因为我没有检查哪个控制器被哪个View调用! 我是个白痴,这就是全部:D