[英]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,引薦來源網址: 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 / ... etc。 請幫忙! 是否有與此相關的文檔,或者是否有人曾經這樣做過?
編輯: 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”開始。 我是否需要提供基本路徑的網址,即“ / var / www / FC ...”? *
如果您使用的是Apache,則默認情況下,您的公開訪問文件夾為/var/www/
以下說明將以最簡單的方式來更改documentroot和setup 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
我解決了這個問題。 這是因為在我的代碼中,先前的用戶制作了一個控制器文件Locationscontroller.php並指定了以下網址:
<form id ="0" action="/FC/locations/confirm_final">
這是我本地計算機中本地主機的本地主機,其中基本文件夾是htdocs,我必須鍵入localhost / FC /才能訪問index.php。 很自然,因為在EC2上我已經將FC本身設置為基本文件夾,所以它試圖訪問其中不存在的另一個FC。 / XXX / locations /表示它搜索“ XXX”控制器,然后搜索其中的位置。 由於我的控制器是“位置”,因此它一直顯示錯誤。
一旦我將其更改為:
<form id ="0" action="/locations/confirm_final">
它指出了正確的控制器即位置。 這是因為我沒有檢查哪個View調用了哪個控制器! 我是個白痴,這就是全部:D
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.