Cakephp应用程序在ec2上显示不正确的路径


Cakephp application displays incorrect path on ec2

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

【2013年8月28日星期三14:15:56】【错误】【客户端xxxxxxxxxxxxxxxxx】文件不存在:/var/www/js,referr:http://xxxxxxxxxxxxxxxxxxxxxxxx.compute.amazonaws.com/

【2013年8月28日星期三14:15:56】【错误】【客户端xxxxxxxxxxxxxxxxx】文件不存在:/var/www/js,referr:http://xxxxxxxxxxxxxxxxxxxxxxxx.compute.amazonaws.com/

显然,这表明路径设置不正确。现在我为我的js和图像指定的路径在webroot文件夹中,所以我的图像在img文件夹中,js在webroot下的js文件夹中,作为路径,我只提供"filename.wanything",这在localhost上很好。我需要如何设置我的路径,以便它们指向正确的位置?当我在一个拙劣的图像上检查元素时,它显示路径/img/xxxxx.jpg。这意味着蛋糕自动进入image/js/css文件夹,这就是我的代码在本地机器上的工作方式。现在,当我手动给出路径时,比如/www/app/webroot/img/xxxx.jpg,它会像这样附加它:img/www/app/。。。等等。请帮忙!是否有关于这方面的文件,或者是否有人以前这样做过?

编辑时间:webroot/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以匹配约定?

*我刚刚发现,视图和控制器等内部的URL都是这样开始的'/FC/locations/。。。等。'我需要从基本路径给出URL吗,即'/var/www/FC…'*

如果您使用的是apache,那么您的公共可访问文件夹默认为/var/www/

以下说明将以最简单的方式更改documentroot和安装程序。

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

sudo service apache2 stop

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

你需要告诉应用程序在哪里可以找到cakeHP:

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

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

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

这是针对本地机器中的localhost,其中基本文件夹是htdocs,我必须键入localhost/FC/才能访问index.php。所以很自然,因为在EC2上,我把FC本身作为我的基本文件夹,它试图访问其中不存在的另一个FC。/XX/locations/意味着它搜索"XXX"控制器,然后在其中搜索位置。由于我的控制器是locations,它一直给出错误。

当我把它改成这个:

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

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