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 が使えるようになってることを確認。レンタルサーバの場合は、

業者さんのサーバ仕様をご確認ください。自前サーバの場合は httpd.conf を修正してね。

<Directory /home/koto2/public_html>
     AllowOverride All
</Directory>

※/home/koto2/public_html は各自の公開ディレクトリのパスにしてくださいね。


ではいくつか設定例を。


.htaccess 設定例 1 (マニュアル通りの基本設定)

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

これは、.js、.ico、.gif、.jpg、.png、.css「以外」で終わるすべてのアクセスを

/index.php に書き換えてねっていう意味。(.htaccess はドキュメントルートに設置)

PHP と関係のない JavascriptCSS、画像ファイルなどは、そのままアクセスさせるわけですね。


.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 ディレクトリ以下を使いたいときに。


まとめ

詳しくは Apache のマニュアルを見てくださいってことなんだけど、よく使うのは、上に出てきた

RewriteCond、RewriteRule、RewriteBase の3つ。+カンタンな正規表現で大抵は間に合います。


と、今回はこんなところでしょうか。