0

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

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

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

显然,这表明路径设置不正确。现在我为我的 js 和图像提供的路径在 webroot 文件夹中,所以我的图像在 img 文件夹中,js 在 webroot 下的 js 文件夹中,所以路径我只提供“filename.whatever”,并且在 localhost 上运行良好。我需要如何设置路径以便它们指向正确的位置?当我检查一个拙劣的图像上的元素时,它显示路径 /img/xxxx.jpg。这意味着蛋糕会自动进入 image/js/css 文件夹,这就是我的代码在本地机器上的工作方式。现在,当我手动提供路径时,例如 /www/app/webroot/img/xxx.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。我是否需要将 locationcont 重命名为 FCcont 以匹配约定?

*我刚刚发现,视图和控制器等中的 url 都以这样的 '/FC/locations/...etc.' 开头 我需要从基本路径中提供 url,即 '/var/www/FC...' 吗?*

4

2 回答 2

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">

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

于 2013-09-04T20:37:34.780 回答
0

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

以下说明将以最简单的方式更改 documentroot 并设置 cake 以帮助您入门。

在准备一切时,首先出于安全原因停止您的 apache 服务器。

sudo service apache2 stop

然后将您的项目复制到/var/www/myproject. 这意味着您将能够在/var/www/myproject/app/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
于 2013-08-29T16:54:32.370 回答