ZF#04 .htaccess の設定例あれこれ
前回:ZF#03 基本+隠しディレクトリ構成 - カタコト日記
さて、しばらく間があいてしまいましたが、Zend Framework 入門のつづきね。
前回のエントリーで Zend Framework を使ったアプリを動かすのに最低限必要なファイルは
- .htaccess(URL の書き換えを担当)
- index.php(書き換えられたすべてのアクセスを受け取る)
- IndexController.php(View に表示しなさいと指示を出す)
- index.phtml(HTML を整形する)
の4つってことだったんだけど、それぞれについて少しずつ解説を。まずは .htaccess から。
.htaccess - URL の rewrite ルールを設定!
Zend Framework では、すべてのアクセスをいったん一つのファイルに集中させて処理をする
Front Controller パターンを採用しています。そして、この URL 書き換えルールを定義するのが
.htaccess(実際に書き換えるのは Apache などの Web サーバです)ってわけ。
すべてのアクセスは、いったん index.php に書き換えられて、そこで呼び出される
FrontController が元の URL を解析して適切な ActionController に処理を依頼します。
.htaccess 設定例 1 (マニュアル通りの基本設定)
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
これは、.js、.ico、.gif、.jpg、.png、.css「以外」で終わるすべてのアクセスを
/index.php に書き換えてねっていう意味。(.htaccess はドキュメントルートに設置)
PHP と関係のない Javascript、CSS、画像ファイルなどは、そのままアクセスさせるわけですね。
.htaccess 設定例 2 (1とほぼ同じだけどもう少しスマートに)
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* index.php
サーバー上のその位置に実在するファイルへのアクセス「以外」は、すべて /index.php に。
設定例1 だと、例えばサーバに置いた .pdf をダウンロードさせたくなったときに、
いちいち条件を加える必要があるんだけど、こっちだとその心配なしってわけね。
.htaccess 設定例 3
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/(directory1|directory2|directory3)/ RewriteRule .* index.php RewriteBase /koto2
特定のディレクトリ(directory1〜3)を書き換え対象からはずしたいときは、3行目のように。
実在するディレクトリすべてへのアクセスを除外するには、次のようにすれば OK です。
RewriteCond %{REQUEST_FILENAME} !-d
5行目は、レンサバなんかで、例えば /koto2 ディレクトリ以下を使いたいときに。