.htaccessを追う-CakePHPをもくじとしてPHPを学ぶ01
とりあえず、cakephpを置いたURL(ここではhttp://example.jpとします)にリクエストがあった時、どのようにファイルが読まれていくか確認したいと思います。 それには.htaccessの理解が必要です。 .htaccessにはApacheの「mod_rewrite」が書かれていて、要求されたURLを書き換えています。 このため、PHPが処理を始める前にこちらでイイ感じに
今、http://example.jpは以下のようなディレクトリ構造をしてます。
example.jp/ .girignore .htaccess CONTRIBUTING.md README.md app/ build.properties build.xml index.php lib/ plugins/ vendors/
.htaccessがありますね。cakeの中にはここ以外にexample.jp/app/とexample.jp/app/webroot/の中に.htaccessがあります。 それぞれの中身は
1) example.jp/.htaccess
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule>
2) example.jp/app/.htaccess
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule>
3) example.jp/app/webroot/.htaccess
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] </IfModule>
となっています。
1)example.jp/.htaccess
RewriteEngine onはRewrite機能が有効ですってこと。 RewriteRuleの行では正規表現を使ってURLが書き換えられています。 要するに、http://example.jpでアクセスしたらhttp://example.jp/app/webroot/へhttp://example.jp/hogehogeでアクセスしたらhttp://example.jp/app/webroot/hogehogeへ行けって書いてます。
2)example.jp/app/.htaccess
1)example.jp/.htaccessと同じです。http://example.jp/appにアクセスすると、http://example.jp/app/webroot/に飛ばされます。
3)example.jp/app/webroot/.htaccess
1), 2)もしくは直接ここに来たらこの.htaccessが読まれます。1),2)とは違ってRewriteCondという行があります。これは指定されたファイルやディレクトリがあればそれを読みなさいってこと。 なければ最終的にindex.phpが読まれるのですが、この時、例えばhttp://example.jp/hogehogeでアクセスしていたらhttp://example.jp/index.php/hogehogeと書き換えられます。 こんな感じ。
結論
後に、CakePHPを使い出すと
http://example.jp/コントローラ/メソッド/パラメータ
なんて形でリクエストすることになると思うんだが、これが
http://example.jp/app/webroot/index.php/コントローラ/メソッド/パラメータ
と書き換えられ、とりあえずexample.jp/app/webroot/index.phpを読むことになります。