« 2014年8月 | トップページ | 2014年11月 »

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 に記述する上記の方法をとるしかないようだ。

2014年10月20日 (月)

Yosemite関連のまとめ[更新]

OS X がバージョンアップするたびに個人的に調べている事項についての記事のまとめ。

[追記]ソフトウェアや周辺機器の動作確認についても少し追記した。

続きを読む "Yosemite関連のまとめ[更新]" »

2014年10月19日 (日)

OS X YosemiteのSpotlightによる日本語テキストの内容検索[改訂版]

プレーンテキストについては Mavericks から変化はない。

プレーンテキストファイルの場合

プレーンテキストファイル(拡張子.txt、.pl、.php、.c など)は、Leopard 以降の OS X 上で作成したものであればどのような文字コードであってもヒットする(文字コードを指定するメタデータがつくから)。

それ以外の OS(Tiger、Windows、Linux)上で作成したものは(メタデータがついていないため)Shift JIS か UTF-8 のみヒットし、EUC-JP や JIS (ISO-2022-JP) ではヒットしない。

OS X 上であってもコマンドラインプログラム(vi、nanoなど )で作成したものは(メタデータがついていないため) Shift JIS か UTF-8 のみヒットする。

HTML ファイルの場合

HTML については Yosemite で大きな変化がある。

EUC-JP および JIS (ISO-2022-JP) で書かれた .html ファイルは Yosemite では全くヒットしない。<META> タグで文字コードを指定してあってもヒットしない。OS X 上のテキストエディターで編集したことにより文字コードを指定するメタデータがついていたとしても、拡張子が .html である限りヒットしない。この点はプレーンテキストとは異なる。

逆に、UTF-8 もしくは Shift JIS でさえあれば、必ずヒットする。正しい HTML 構造をとっていようといまいと、<META> タグで文字コードを指定していようといまいとヒットする。

但し、上記に関わらず、<META> タグ内で robots を noindex と指定すればヒットしなくなる。

« 2014年8月 | トップページ | 2014年11月 »