osはlionです。
最近、apacheをlocal環境で使用することがなかったので
久しぶりにhttp://localhost/~user にアクセスしてみると
404 Not Found になりました。
あれ?どうだったけとなったので調べてみました。
httpd.conf / plistを参照したメモです。
最初に
Mac OSXを触ったとき、(当時は5色のiMac(ストロベリー)でした。)
おおすげー、localhost/~username でapache動くのかと感動した覚えがあります。
それ自体はmod_userdir - Apache HTTP サーバで実現しています。
結論から
web共有しないとhttpdのパラメータにWEBSHARING_ONが無い状態でapacheが起動します。
この値を見て、UserDirを有効にするかどうかをという設定が入っているため
localhost/~user でアクセスできません。
httpdの起動パラメータを設定しているplistに手動で追加でもokですが、
plistの書き換えは環境設定を変更することで自動でやってくれます。
SystemPreference > Sharing > Web Sharing
なのでweb共有okな人は、環境設定を変更。
web共有したくないけど、UserDirを使いたい場合は、
httpd.confの下記Includeを
#httpd.conf
Include /private/etc/apache2/extra/httpd-userdir.conf
以降、調査メモ
まずはhttpd.confから見ていきます
#/etc/apache2/httpd.conf <IfDefine WEBSHARING_ON> (略) # User home directories Include /private/etc/apache2/extra/httpd-userdir.conf
で extra/httpd-userdir.conf を読み込んでいます。
#extra/httpd-userdir.conf UserDir Sites # # Users might not be in /Users/*/Sites, so use user-specific config files. # Include /private/etc/apache2/users/*.conf <IfModule bonjour_module> RegisterUserSite customized-users </IfModule>
さらに users/*.conf を読み込んでいます。
users/loginusername.conf が存在し、中身も問題ありません。
<Directory "/Users/rochefort/Sites/"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory>
設定自体は問題ないようです。
ん?
と思い、httpd.confを見直すと
<IfDefine WEBSHARING_ON>
という記述があります。
どうやら、起動時のパラメータとしてWEBSHARING_ONを渡しているようです。
macはlaunchctlでデーモン管理しているのでplistを見てみます。
plist名を調べます。
sudo launchctl list | grep apache /etc/apache2 4562 - org.apache.httpd
あとは、locateで特定。
#/System/Library/LaunchDaemons/org.apache.httpd.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Disabled</key> <true/> <key>Label</key> <string>org.apache.httpd</string> <key>ProgramArguments</key> <array> <string>/usr/sbin/httpd</string> <string>-D</string> <string>FOREGROUND</string> </array> <key>OnDemand</key> <false/> <key>SHAuthorizationRight</key> <string>system.preferences</string> </dict> </plist>