Wednesday, March 23, 2011

Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden のエラーについて

ちょっと Apache の設定でハマったのでメモ。

今回の環境は、以下の通り。

  • 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


以上でーす。動いて良かったー!

No comments:

Post a Comment