腹が減ってはなんとやら

大学院博士課程から脱落しました。

.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を読むことになります。

参考