簡體   English   中英

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,引薦來源網址: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM