読者です 読者をやめる 読者になる 読者になる

ウェブ雑記

tushuhei が奮闘する日記

ZendFramework奮闘記Vol.1【mod_rewriteに泣く】

Introduction

「いっちょうフレームワークやるか!」ということでZend Frameworkに挑戦することに。
戦友はMacbook Air 11inch (Mac OS X 10.6.7)、mac標準装備のapache, phpと、サイトから新たにインストールしたmysql
CodeZineの特集などを参考にしながら、インストール、Hello, World!アプリケーションの作成まではサクサクと進んだ(と思い込んでいた)のですが、その後すぐに様子がおかしいことに気づきました。
Hello, WorldアプリケーションはcontrollersディレクトリのIndexAction.phpとviewsディレクトリのindex/index.phtml, hello.phtmlを使って作成しました。順調にパラメータの受渡しもできました。
しかし、新しくHeloAction.phpとhello/index.phtmlを作成してモジュールを設けて、localhost/zendapp/hello/indexにアクセスした時、なんと404 Not Foundが返されました。
実はこのとき、URLを司るナイフ、mod_rewriteが有効になっていなかったのです・・・!

ローカル編

まず、ローカルのMacbook Air側で行った設定についてです。
mod_rewrite を使いこなす (初級) part2-nia.noteを参考にしました。
これに加えて、独自に行なった設定は以下です。

httpd.confの"DocumentRoot"を"/User/ユーザ名/Sites"にする

初期設定が"/Library/WebServer/Documents"だったので、シンボリックリンクで対処していたのですが・・・。

/private/etc/apache2/users/ユーザ名.confの"AllowOverride"をAllにする

Making Mod Rewrite and htaccess work on Mac OS x Scribbleによると、ユーザ名.confも絡んでるようなので、見てみると、あるではありませんか!これも"AllowOverride All"に。

Options Allを追記

これらの作業を進めると、どんなにchmodコマンドを駆使しても403 Forbiddenが出てくることがあります。(私は出てきました笑) RewriteEngine On が動作しない!によると、Optionsをいじる必要があるみたい。

これらの設定を加えてようやく、

動きました\(^^)/

リモート編

ローカルと同様にまずmod_rewriteがあるかを調べるのですが、うちのサーバ(Apache2.2.14)では"httpd -M"ではなく、"apache2 -M"というコマンドでうまくいきました。
そして順調にリストが出るかと思いきや、こんなメッセージが。

[warn] module rewrite_module is already loaded, skipping
Syntax error on line 5 of /etc/apache2/httpd.conf:
AllowOverride not allowed here

なんと。httpd.confに文法エラーがあると言ってきました。
実際に見てみると、なんと直打ちでAllowOverride Allと書いてある。
AllowOverrideはタグで囲まないと使用できませんヽ(`Д´)ノ
ということで、これはコメントアウト。使用するアプリケーションのDirectoryタグを作って中に"Options All"と"AllowOverride All"を中に書きました。rewriteアプリケーションならこんなかんじ。


Options All
AllowOverride All
Order allow,deny
Allow from all

このように書き換えて再び "apache2 -M"コマンドを打って、rewrite_moduleがあることを確認(さっきの警告文であるって言ってたけど笑)して、ローカル編と同様にOptionsとAllowOverrideを変更していけば・・・

動きました\(^^)/

注意

必ずhttpd.confなどの設定ファイルを変更したらapacheを再起動しましょう!これを忘れて「あれ、変わらないなぁ・・・」とやってると更に泥沼にハマるハメに!

課題

apachectl restartでガンガン再起動していたが、あんまりよくないのかもしれない・・・。Gracefulにすべきだったか。
http://httpd.apache.org/docs/2.2/ja/stopping.html

独り言

最近エディタで範囲選択するときにShift+vする癖が付いてきました・・・。vim癖w