我在名为 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/