2012-04-12 15 views
2

ApacheサーバーでCakePhpを設定する際に問題が発生しました。私の開発環境ではうまくいきましたが、今は展開しようとしています。CakePhp 2.0 .htaccess

URLは次のようになります。

"http://www.example.com/mysite/" 

サンプルコントローラのアクションは次のようになります。デフォルトのhtaccessファイルを使用して

"http://www.example.com/mysite/users/login" 

が動作するようには思えません。

mod_rewriteはphpInfoに従ってロードされ、URLを書き換えていますが、/ mysite /がコントローラとして認識されます。ここで が出力され、私の.htaccessファイル

Missing Controller 

Error: MysiteController could not be found. 

Error: Create the class MysiteController below in file: >app/Controller/MysiteController.php 

ルート:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 
</IfModule> 

アプリ:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^$ webroot/ [L] 
    RewriteRule (.*) webroot/$1 [L] 
</IfModule> 

ウェブルート:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?/$1 [QSA,L] 
</IfModule> 

は私が変更に探している必要があり私の.htaccessファイルs、または私のCakePhp設定ファイル?私はいくつかの異なるRewriteBasesを試しましたが、異なるエラーしか得られませんでした。

編集:サーバーがphp-cgiを実行していて、すべてのリンクがcgi-binに書き込まれているようです。たとえば:

$this->Html->meta('icon'); 

はどこか、なぜこれが起こってできたのように、パス「/cgi-bin/cgiwrap/w3u_mysite/mysite/favicon.ico」 任意のアイデアを書き込み?

+0

ドメインを完全に使用すると何が問題になりますか? (mysite部分はありません)、複数のアプリケーションのドメインを使用する予定がある場合は、常にサブドメインを使用できます。 – mark

+0

それは私がホストから与えられたウェブスペースであり、私はドメイン全体を使うことができません – seelmobile

答えて

3

、問題がに関連していましたcgi phpを実行しているサーバー。私は問題が何だったのか正確には分かっていませんが、CakePhpのGoogleグループはこのソリューションを提供しています:

App.baseUrlのコメントアウトされた定義があります。それのコメントを解除し、その上、以下の

Configure::write('App.baseUrl', '/mysite/'); 

と交換し、あなたは無視すべき.htaccessファイルを削除すると言ったコメントがあります。サイトは.htaccessファイルを標準値として正常に動作しましたが、RewriteBaseは必要ありませんでした。ひとつの煩わしさは、$this->Html->css()$this->Html->js()の機能がうまくいかなかったことですが、テンプレートでしか呼び出せないので、ハードコードするのはひどいことではありません。

誰かがこれらのCGIの原因についての洞察を持っている場合は、共有してください。私はすべてのHTMLヘルパーを使うことができない場合でも、まだちょっと気味悪い感じがします。

0

Rewritebase /mysite/(恐らく '/ mysite'を二重引用符で囲んだり、二重引用符を付けずに、あなたが試してみてください)を.htaccessesに追加すると、mod rewriteはそのフォルダを考慮に入れます。


あなたは正しいパスをwebroot/index.phpファイルで確認しましたか? 最後の手段として、ルート内の「mysite」を除外することができますか?


最終提案は:あなたのrewriterulesにappmysite/を付加しました。

+0

最初の提案のすべての組み合わせがうまくいかず、何も違いがなく、他は内部サーバエラーを引き起こしました。 index.phpが正しく設定されていると思いますが、デフォルトを使用しています。 phpInfoからのルートパスを使用してカスタマイズすると違いはありません。 CakePhpでルーティングを変更しようとしましたが、興味深い結果が出ました。 CGIエラーのある別のURLにリダイレクトされたので、ドメインでも書き換えを使用していると思います。 最終的な提案により、内部サーバーエラーが発生しました。 – seelmobile

+0

私のホストは、私のディレクトリのAllowOverrideがすべてではなくディレクティブに設定されていると具体的に述べています。この結果、RewriteBaseが正常に動作しない可能性がありますか? – seelmobile

+0

私はちょっとここの提案から外れています...最後の質問はありますが、RewriteBaseを使用したときに、すべての.htaccessファイルに使用しましたか? – Joep

0

私はいくつかのサーバーで同様の問題があります。 私の解決策は、すべての.htaccessファイルの絶対パスに名前を付けることでした。

のような何か:

ルート:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^$ /mysite/app/webroot/ [L] 
    RewriteRule (.*) /mysite/app/webroot/$1 [L] 
</IfModule> 

アプリ:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^$ /mysite/app/webroot/ [L] 
    RewriteRule (.*) /mysite/app/webroot/$1 [L] 
</IfModule> 

ウェブルート:私の編集に疑われたよう

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ /mysite/app/webroot/index.php?/$1 [QSA,L] 
</IfModule>