2010年01月15日(金)
Zend Framework その3 - リライト設定(Apacheのmod_rewrite)
テーマ: ├ Zend FrameworkZend Framework その2 - マニュアルを読んでみるの続き。
引き続き、Zend Frameworkを初心者がマニュアル読んだだけで使えるようになる?ことを目指していきます。
まず環境設定をします。
リライト機能がZend Frameworkには必須らしいので、その設定から。
ここで言うリライトとは、アクセスしたURLをウェブサーバ内で書き換えて、別のURLに置き換えること。
設定の仕方は、以下の二箇所に載っていました。
上の「D.4. リライト設定ガイド」によると、リライトには以下の三通りのやり方があるようです。
そのためには、httpd.confを以下のように書き換えます。
C:\Apache2.2\conf\httpd.conf
C:\Apache2.2\conf\httpd.conf
ファイルの置き場所は、リライトを実施したいディレクトリ(トップページとか)になります。
ここでするのは動作確認までなので、ひとまずドキュメントルート直下とします。
中身の書き方は、上記マニュアル「12.5. 標準のルータ」によると以下の二通りあって、どちらでもいいみたいです。
ここまでできたら、Apacheを再起動します。
まず、ドキュメントルート直下にindex.phpとtest.phpという二つのファイルを作ります。
内容は、ブラウザから見て二つの違いがわかるようにしてください。
試しに以下のように書いてみます。
C:\Apache2.2\htdocs\index.php
C:\Apache2.2\htdocs\test.php
そしてhttp://localhost/test.phpにアクセスしてみます。
test.phpにアクセスしたはずで、URLもtest.phpになったままなのに、
ブラウザ画面にはhttp://localhost/index.phpへアクセスした時と同じように表示されていれば成功!
これでリライト設定はできました。
また次回へ続く。→Zend Frameworkその4 - include_pathを設定
引き続き、Zend Frameworkを初心者がマニュアル読んだだけで使えるようになる?ことを目指していきます。
まず環境設定をします。
リライト機能がZend Frameworkには必須らしいので、その設定から。
ここで言うリライトとは、アクセスしたURLをウェブサーバ内で書き換えて、別のURLに置き換えること。
設定の仕方は、以下の二箇所に載っていました。
上の「D.4. リライト設定ガイド」によると、リライトには以下の三通りのやり方があるようです。
- バーチャルホスト内でのリライト(Apache使用の場合)
- .htaccessファイル内でのリライト(Apache使用の場合)
- Microsoft Internet Information サーバ(IIS使用の場合)
■手順
1.Apacheのmod_rewriteを設定
まずはApacheの設定をいじって、mod_rewriteというモジュールを使えるようにします。そのためには、httpd.confを以下のように書き換えます。
C:\Apache2.2\conf\httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
リライトモジュールを呼び出す行の、先頭の#(コメントアウト用)を外す。C:\Apache2.2\conf\httpd.conf
<Directory "C:/Apache2.2/htdocs">
(略)
# Options Indexes FollowSymLinks
Options All
(略)
# AllowOverride None
AllowOverride All
(略)
</Directory>
ドキュメントルートの、Optionsの設定がAllに、AllowOverrideの設定がAllになるように、書き換える。(略)
# Options Indexes FollowSymLinks
Options All
(略)
# AllowOverride None
AllowOverride All
(略)
</Directory>
2..htaccessの作成
次に、.htaccessというファイルを作成します。ファイルの置き場所は、リライトを実施したいディレクトリ(トップページとか)になります。
ここでするのは動作確認までなので、ひとまずドキュメントルート直下とします。
Windowsの場合、既にあるファイルの名まえをエクスプローラ上で.htaccessに変えようとすると、
拡張子の前に何も無いため、「ファイル名を入力してください」とエラーが出て変えられません。
なので、エディタから直接ファイルを新規作成してから保存するか、もしくは
一旦適当な名まえのファイルを作り、それを開いてから「名前をつけて保存」を選ぶことで
ファイル名を.htaccessにして保存します。
拡張子の前に何も無いため、「ファイル名を入力してください」とエラーが出て変えられません。
なので、エディタから直接ファイルを新規作成してから保存するか、もしくは
一旦適当な名まえのファイルを作り、それを開いてから「名前をつけて保存」を選ぶことで
ファイル名を.htaccessにして保存します。
中身の書き方は、上記マニュアル「12.5. 標準のルータ」によると以下の二通りあって、どちらでもいいみたいです。
- 書き方その1
C:\Apache2.2\htdocs\.htaccessRewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php - 書き方その2(こちらの方が推奨)
C:\Apache2.2\htdocs\.htaccessRewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
mod_rewriteの設定の仕方、.htaccessの書き方、ここで設定している内容の意味について、
詳しくは以下のApacheのマニュアルを参照してください。
詳しくは以下のApacheのマニュアルを参照してください。
mod_rewrite モジュール URL 書き換えエンジン
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html(Apache1.3版のマニュアル。日本語)
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html(Apache1.3版のマニュアル。日本語)
Apache Module mod_rewrite
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html(Apache2.2版のマニュアル。英語)
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html(Apache2.2版のマニュアル。英語)
ここまでできたら、Apacheを再起動します。
3.リライトの動作確認
これでmod_rewriteが有効になるはずなので、リライトが正常に動くかのテストをしてみます。まず、ドキュメントルート直下にindex.phpとtest.phpという二つのファイルを作ります。
内容は、ブラウザから見て二つの違いがわかるようにしてください。
試しに以下のように書いてみます。
C:\Apache2.2\htdocs\index.php
<?php
print "index";
C:\Apache2.2\htdocs\test.php
<?php
print "test";
そしてhttp://localhost/test.phpにアクセスしてみます。
test.phpにアクセスしたはずで、URLもtest.phpになったままなのに、
ブラウザ画面にはhttp://localhost/index.phpへアクセスした時と同じように表示されていれば成功!
ここでリライトの動作確認のみする場合、.htaccessは書き方その1の方を使ってください。
書き方その2の場合、失敗します。
最後の行「RewriteRule~index.php~」(index.phpへ置換する、の意)の前の行に、
「~[NC,L]」(Lはここで置換処理を終了する、の意)が入ってるからかな…多分。
このLを取っ払えば、ここでのリライト動作確認は成功します。
実際にZend Frameworkを動かすときには、その1もその2もそのままで使えます。
書き方その2の場合、失敗します。
最後の行「RewriteRule~index.php~」(index.phpへ置換する、の意)の前の行に、
「~[NC,L]」(Lはここで置換処理を終了する、の意)が入ってるからかな…多分。
このLを取っ払えば、ここでのリライト動作確認は成功します。
実際にZend Frameworkを動かすときには、その1もその2もそのままで使えます。
これでリライト設定はできました。
また次回へ続く。→Zend Frameworkその4 - include_pathを設定