今回の環境は、以下の通り。
- Mac OS X version 10.6.7
- Server version: Apache/2.2.17 (Unix)
mod_rewrite を使ったアプリケーションを ~/Sites に置いてみた。mod_rewrite を使っているので、アプリケーションには .htaccess が含まれていた。きちんとしたソースからダウンロードしたので、.htaccess には間違いがないはず。
で、http://localhost/index.php にアクセスすると、Forbiddenエラー。なので、Apache のログを見てみた。
# less /var/log/apache2/error_log [Wed Mar 23 19:25:50 2011] [error] [client ::1] Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /Users/yasu/Sites/index.php
なんだか、FollowSymLinks の設定が出来ていないらしい。ということで、Apache の設定ファイルを見てみる。
# less /etc/apache2/httpd.conf <Directory /> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory>
何も問題ないように見える。FollowSymLinks もしてるし。Apache を再起動したり、.htaccess を削除して Forbidden エラーがで出なくなることを確認したり、など、色々と試してみるが依然として Forbidden エラーが表示される。
グーグルで検索してみたところ、mod_rewrite を使うには確かに FollowSymLinks が必要な模様。しかし、FollowSymLinks してるのに mod_rewrite が動かない!
ゴニョゴニョしているうちに、カスタムの Apache の設定を作成したことを思い出した。カスタムの Apache の設定を見てみると以下のようになっていた。
<Directory "/Users/yasu/Sites/"> Options Indexes MultiViews AllowOverride FileInfo Order allow,deny Allow from all </Directory>
この設定の Options に FollowSymLinks をつけて以下のようにした。
Options Indexes MultiViews FollowSymLinks
すると、Forbidden のエラーが解消された!!
ヽ(´∀`)ノ
調べてみると、httpd.conf で /private/etc/apache2/extra/httpd-userdir.conf をインクルードし、httpd-userdir.conf で /private/etc/apache2/users/*.conf をインクルードしている模様。httpd.conf で直接 /private/etc/apache2/users/*.conf をインクルードしていないのが厄介なところ。
# less /etc/apache2/httpd.conf Include /private/etc/apache2/extra/httpd-userdir.conf # less /etc/apache2/extra/httpd-userdir.conf Include /private/etc/apache2/users/*.conf
因みに、Mac の場合、/etc は /private/etc にシムリンクが貼られています。
# ls -l /etc lrwxr-xr-x@ 1 root wheel 11B 2 21 2010 /etc@ -> private/etc
以上でーす。動いて良かったー!
0 件のコメント:
コメントを投稿