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 オブジェクトでさまざまな設定を行ったりするなど、いくつか試してみましたが、ここでは何も役に立ちませんでした。
誰かがこの問題を解決する方法を教えてくれたら本当にありがたいです。