« Yosemite関連のまとめ[更新] | トップページ | RTFDをWindowsで開けるように変換[概要] »

2014年10月29日 (水)

YosemiteでユーザディレクトリCGI

OS X Yosemite では apache の仕様が若干変更になっており、Mavericks までのやり方ではユーザーディレクトリ /Users/ユーザー名/Sites を http で公開することができなくなっている(注:「ユーザー名」の部分には実際には自分のユーザーアカウント名が入る。以下同様)。

この点についてはすでにウェブ上に情報がいくつも上がっているので、詳細は述べないが、かいつまんで言うと以下の通り。

  1. /private/etc/apache2/extra/httpd-userdir.conf において、「#Include /private/etc/apache2/users/*.conf」の「#」を消す。
  2. /private/etc/apache2/httpd.conf において「#LoadModule userdir_module libexec/apache2/mod_userdir.so」の「#」を消す。
  3. 同じく /private/etc/apache2/httpd.conf において、終わりのほうにある「#Include /private/etc/apache2/extra/httpd-userdir.conf」の「#」を消す。

その上で、sudo apachectl restart コマンドで設定を apache に反映させれば /Users/ユーザー名/Sites 以下の公開が可能になる。


問題は、ユーザーディレクトリで CGI を有効にする場合である。筆者が現時点で調べた限りでは、ウェブ上には見つからなかったため、自力で色々試行錯誤せざるを得なかった。その結果、一応可能にはなった。以下にそれを書き留めておく。

まず、/private/etc/apache2/httpd.conf において、「#LoadModule cgi_module libexec/apache2/mod_cgi.so」の「#」を消す。

次に、/private/etc/apache2/users/ユーザー名.conf を以下のように記述する。

<Directory /Users/ユーザー名/Sites>
	AddHandler cgi-script .cgi
</Directory>

そして /Users/ユーザー名/Sites/.htaccess を以下のように記述する。

Options +ExecCGI

その上で、sudo apachectl restart コマンドで設定を apache に反映させれば /Users/ユーザー名/Sites 以下で CGI が動くようになる。

※※※
もしくは、/Users/ユーザー名/Sites/.htaccess を作成せずに、/private/etc/apache2/users/ユーザー名.conf に

<Directory /Users/ユーザー名/Sites>
	AddHandler cgi-script .cgi
</Directory>
<Directory /Users/ユーザー名/Sites/cgi-bin>
	Options +ExecCGI
</Directory>

と書く方法もあるが、この場合、CGI が動くのは cgi-bin ディレクトリ以下に限られる。仮に <Directory /Users/ユーザー名/Sites/cgi-bin> を <Directory /Users/ユーザー名/Sites> と書き換えても、Site ディレクトリ直下ではなぜか動かすことができない。直下で動かすには .htaccess に記述する上記の方法をとるしかないようだ。


ついでに SSI を有効にする方法も述べておく。

まず、/private/etc/apache2/httpd.conf において、「#LoadModule include_module libexec/apache2/mod_include.so」の「#」を消す。

次に、/private/etc/apache2/users/ユーザー名.conf を以下のように記述する(注:以下、SSI だけでなく、CGI も同時に有効にすることを前提として記述している)。

<Directory /Users/ユーザー名/Sites>
	AddType text/html .shtml
	AddHandler cgi-script .cgi
</Directory>

そして /Users/ユーザー名/Sites/.htaccess を以下のように記述する。

Options +ExecCGI +Includes

その上で、sudo apachectl restart コマンドで設定を apache に反映させれば /Users/ユーザー名/Sites 以下で SSI が動くようになる。

※※※
もしくは、/Users/ユーザー名/Sites/.htaccess を作成せずに、/private/etc/apache2/users/ユーザー名.conf に

<Directory /Users/ユーザー名/Sites>
	AddType text/html .shtml
	AddHandler cgi-script .cgi
</Directory>
<Directory /Users/ユーザー名/Sites/cgi-bin>
	Options +ExecCGI
</Directory>
<Directory /Users/ユーザー名/Sites/ssi>
	Options +Includes
</Directory>

と書く方法もあるが、この場合も CGI と同様、SSI が動くのは ssi ディレクトリ以下に限られる。仮に <Directory /Users/ユーザー名/Sites/ssi> を <Directory /Users/ユーザー名/Sites> と書き換えても、Site ディレクトリ直下ではなぜか SSI を動かすことができない。直下で動かすには .htaccess に記述する上記の方法をとるしかないようだ。

« Yosemite関連のまとめ[更新] | トップページ | RTFDをWindowsで開けるように変換[概要] »

コメント

以下にて、ようやくCGIが動作しました。
#LoadModule cgi_module libexec/apache2/mod_cgi.so の「#」を消す。
情報提供、ありがとございました。

コメントを書く

(ウェブ上には掲載しません)

« Yosemite関連のまとめ[更新] | トップページ | RTFDをWindowsで開けるように変換[概要] »