6

CGI-PHP を使用し、apache エイリアスを宣言できない環境で CakePHP 2.1 アプリケーションを実行する必要があります。サブドメインへのリクエストを mod_rewrite で CakePHP にリダイレクトしたいのですが、うまくいきません。

現在のセットアップ

  • ウェブルートは~/user/public_html
  • CakePHPが入っています~/user/public_html/cakephp/
  • CakePHP はでリクエストする必要がありますdev.mydomain.tld

私が今まで持っているのはこれです(すべてのパスはwebrootに関連しています):

  • ~/user/public_html/.htaccess

    RewriteEngine on
    Options +FollowSymlinks
    RewriteCond %{HTTP_HOST} ^(www\.)?dev\.mydomain.com$ [NC]
    RewriteCond %{REQUEST_URI} !^/cakephp/app/webroot/ [NC]
    RewriteCond %{REQUEST_URI} !/$
    RewriteCond %{DOCUMENT_ROOT}/cakephp/app/webroot%{REQUEST_URI}/ -d
    RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R,L]
    RewriteCond %{HTTP_HOST} ^(www\.)?dev\.mydomain.com$ [NC]
    RewriteCond %{REQUEST_URI} !^/cakephp/app/webroot/ [NC]
    RewriteRule ^(.*)$ /cakephp/app/webroot/$1 [L]
    
  • ~/user/public_html/cakephp/app/webroot/.htaccess

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
    

問題

リクエストがどういうわけか正しくルーティングされません (モジュールとして PHP を使用し、/cakephp/app/webroot/レベルで仮想ホストを使用する私の開発環境では、アプリケーションは問題なく実行されます)。でホームページをリクエストするとdev.mydomain.tld、エラーが発生するだけです。Cake は、CakephpController が見つからないことを教えてくれます。

デバッグ情報

  • $_SERVERの最初の行として debuggedの興味深い部分/cakephp/app/webroot/index.php

      [REDIRECT_REDIRECT_REDIRECT_STATUS] => 200
      [REDIRECT_REDIRECT_STATUS] => 200
      [REDIRECT_HANDLER] => php-script
      [REDIRECT_STATUS] => On
      [HTTP_HOST] => dev.mydomain.tld
      [HTTP_CONNECTION] => keep-alive
      [SERVER_SOFTWARE] => Apache/2.2.21 (Unix)
      [SERVER_NAME] => dev.mydomain.tld
      [SERVER_ADDR] => 192.0.43.10
      [SERVER_PORT] => 80
      [DOCUMENT_ROOT] => /home/user/public_html
      [SCRIPT_FILENAME] => /home/user/public_html/cakephp/app/webroot/index.php
      [REDIRECT_URL] => /cakephp/app/webroot/index.php
      [GATEWAY_INTERFACE] => CGI/1.1
      [SERVER_PROTOCOL] => HTTP/1.1
      [REQUEST_METHOD] => GET
      [QUERY_STRING] => 
      [REQUEST_URI] => /
      [SCRIPT_NAME] => /cakephp/app/webroot/index.php
      [_PHP5_WORK_DIR] => /home/user/public_html/cakephp/app/webroot
      [PHP_SELF] => /
      [ORIG_PATH_INFO] => 
      [ORIG_PATH_TRANSLATED] => /home/user/public_html/cakephp/app/webroot/index.php
      [PATH_INFO] => /cakephp/app/webroot/index.php
    
  • CakeRequestディスパッチャに渡されるオブジェクトの興味深い部分:

      url => 'cakephp/app/webroot/index.php'
      base => '/cakephp'
      webroot => '/app/webroot/'
      here => '/cakephp/cakephp/app/webroot/index.php'
    

質問

したがって、ここで得られないのは、CakeRequest オブジェクトがフォルダー構造への参照を保持している理由$_SERVER['REQUEST_URI'] == '/'です。これを正しくするには、どうすればよいですか?そもそも、どこで問題を探すべきですか? mod_rewrite ディレクティブまたは CakePHP 自体で? すべての .htaccess ファイルで RewriteBase を設定したりApp.baseUrl、Configuration オブジェクトでさまざまな設定を行ったりするなど、いくつか試してみましたが、ここでは何も役に立ちませんでした。

誰かがこの問題を解決する方法を教えてくれたら本当にありがたいです。

4

3 に答える 3

2

誰かがこの問題を解決する方法を教えてくれたら本当にありがたいです.

では、答えが分からないので参考にさせていただきます。:)

あなたとよく似た問題を抱えていたこの質問を読んだことがありますか?

于 2012-08-27T17:32:29.950 に答える
1

従来は、CakePHPアプリケーションへのリクエストを/cakephp/app/レベルにリダイレクトしていました。

cakephpコントローラー名として解釈したいという事実は、これが問題であることを示しています。

あなたの問題はおそらくALSに関連していますが、まったく同じではありません。ケーキPHPアプリが実際にはサーバーのルートに存在しないように見えるようにするために、実際に必要なのは次のとおりです。

RewriteBase /

.htaccessもう1つの潜在的な問題は、開発環境が。の下のファイルに関連する潜在的な副作用にさらされることがないことです/cakephp/app

私が試したいのは、最初に/cakephpフォルダーに関連するRewriteBaseを追加することです

  1. app / .htaccessの場合:/
  2. app / webroot / .htaccess:/webroot/
于 2012-08-29T23:37:43.263 に答える
1

/~ユーザー名の URL は mod_userdir、mod_rewrite で生成されますが、~ 文字は削除されます

したがって、デフォルトの Cake htaccess ファイルを使用して、以下を追加します。

RewriteBase /~username/path/to/cake

関連するすべての htaccess ファイルに

于 2012-08-23T15:03:41.423 に答える