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

标签 php css cakephp path amazon-ec2

我在名为 FC 的文件夹下有一个 cakephp 元素,其中包含我上传到 ec2 上的 ubuntu 实例的应用程序文件夹、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”的路径并且在本地主机上工作正常。 我需要如何设置我的路径,以便它们指向正确的位置?当我检查拙劣图像上的元素时,它显示路径/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。我是否需要将 locationscont 重命名为 FCcont 以匹配约定?

*我刚刚发现, View 和 Controller 等中的 url 都是这样开头的 '/FC/locations/...etc.'我是否需要从基本路径提供 url,即 '/var/www/FC...' ? *

最佳答案

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

以下说明将以最简单的方式更改 documentroot 和设置蛋糕,让您入门。

在准备一切时,出于安全原因,首先停止您的 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

为了确保网络服务 (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

关于php - Cakephp 应用程序在 ec2 上显示不正确的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18511642/

相关文章:

PHP 函数转 MySQL 函数

php - 超链接起始斜杠?

php - Laravel 5 更改 public_path()

Cakephp 3.0 - 异常 : SQLSTATE[42S02]: Base table or view not found

php - 更改 Cakephp 3 中的默认日期时间格式

php - PDO SQL 语句不工作

css - CSS3转换方法和CSS2相对定位之间有什么区别?

css - 您应该在使用 BEM 时设置元素样式还是应该添加额外的类

mysql - People 有 3 个地址,地址属于 People,最佳实践是什么?

javascript - 删除在图像 Canvas HTML5 上绘制的彩色线条