0

私はec2のubuntuインスタンスにアップロードしたappフォルダー、index.phpなどを含むフォルダー名FCの下にcakephpプロジェクトを持っています。フォルダをアップロードすると、index フォルダが表示されていたので、FC 直下のコンテンツを www フォルダにアップロードして、index.php ファイルを自動的に取得できるようにしました。これで、Web サイトが表示され始めましたが、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 は、index.ctp を含む LocationsController にある複数のリンクにリダイレクトしますが、cake は FCController を見つけようとしています。慣習に合わせて、locationcont の名前を FCcont に変更する必要がありますか?

*ビューやコントローラーなどの内部の URL はすべて、「/FC/locations/...etc.」のように始まることがわかりました。ベース パス、つまり「/var/www/FC...」から URL を指定する必要がありますか?? *

4

2 に答える 2

0

Apache を使用している場合、デフォルトでパブリックにアクセス可能なフォルダーは次のとおりです。/var/www/

次の手順では、最も簡単な方法でドキュメントルートとセットアップ ケーキを変更し、作業を開始します。

すべてを準備する間、セキュリティ上の理由から、最初に apache サーバーを停止します。

sudo service apache2 stop

次に、プロジェクトを にコピーします/var/www/myproject。つまり、 で webroot を見つけることができます/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 に答える
0

私は問題を整理しました。私のコードでは、前のユーザーがコントローラーファイル Locationscontroller.php を作成し、次のように URL を指定していたためです。

<form id ="0" action="/FC/locations/confirm_final">

これは、ベース フォルダーが htdocs であるローカル マシンの localhost 用でした。index.php にアクセスするには、localhost/FC/ と入力する必要がありました。当然のことながら、EC2ではFC自体をベースフォルダーにしたため、存在しない別のFCにアクセスしようとしていました。/XXX/locations/ は、「XXX」コントローラーを検索し、その中の場所を検索することを意味します。私のコントローラーは場所だったので、エラーが発生し続けました。

これに変更するとすぐに:

<form id ="0" action="/locations/confirm_final">

それは場所である右のコントローラーを指していました。どのビューからどのコントローラーが呼び出されたかを確認していなかったからです。私はばかです、それだけです :D

于 2013-09-04T20:37:34.780 に答える