PPC Mac では PHP のバージョンごとにポートを変えて複数起動した Lighttpd をバックエンドにし、Apache2 の mod_rewrite で切り替えていたのですが、Intel Mac では Lighttpd の調子が悪いので Apache2 だけでやることにしました。
httpd.conf より一部抜粋 (VirtualHost 等の設定は割愛) :
<Directory "/opt/local/apache2/cgi-bin"> Options FollowSymLinks </Directory> ScriptAlias /cgi-bin/ "/opt/local/apache2/cgi-bin/" Action php-script-4.4 /cgi-bin/php-4.4 Action php-script-5.1 /cgi-bin/php-5.1 Action php-script-5.2 /cgi-bin/php-5.2 <Directory "/Users/rsky/Sites/php44"> AddHandler php-script-4.4 .php </Directory> <Directory "/Users/rsky/Sites/php51"> AddHandler php-script-5.1 .php </Directory> <Directory "/Users/rsky/Sites/php52"> AddHandler php-script-5.2 .php </Directory>
自分専用マシン、 非公開鯖なので ~/Sites をドキュメントルートにしています。そしてサブディレクトリ単位で PHP を切り替える仕組み。拡張子はすべて .php、パーミッション 644 のままで OK です。ちなみに ~/Sites 全体では同じく拡張子 .php で mod_php5 を使うようになっています。
/opt/local/apache2/cgi-bin/php-* は別のディレクトリにインストールされている FastCGI 版 PHPで、シンボリックリンクを張っています。 (この設定では FastCGI ではなく CGI として動作)
注意すべき点がひとつだけあり、PHP4 では php.ini で cgi.fix_pathinfo = 1
に設定しないといけません。さもないと正しい $_SERVER['PATH_INFO']
や $_SERVER['SCRIPT_NAME']
が取得できず、スクリプトの動作に支障を来します。PHP5 からはデフォルト値が 0 から 1 に変更されており、設定する必要はありません。
また、外部に公開するサーバでこういうことをする場合はセキュリティのため configure のオプション --enable-force-redirect
をつけてコンパイルするか、php.ini で適切な doc_root
(この場合は /Users/rsky/Sites/php*
) を設定してやる必要があります。