SSIを使えるようにする
2005年2月13日 掲載
2006年1月17日 改訂
「SSIを使えるようにする」とのタイトルだが、実は標準の設定ですでにSSIが使えるようになっている。
SSIにまつわる「/etc/httpd/conf/httpd.conf」の設定は次の2カ所。ひとつめは440行目あたりにある「Options Includes」、もうひとつは830行目あたりにある「AddType text/html .shtml」だ。
ただし、440行目にある「Options Includes」はセキュリティ上の問題を招きやすいので、SSIのEXECコマンドを使わないときは「Options IncludeNoExec」に変更しておく。変更したあとは「/etc/rc.d/init.d/httpd restart」もしくは「service httpd restart」でhttpdを再起動しておく。
Options Indexes Includes FollowSymLinks MultiViews ↓ Options Indexes IncludesNoExec FollowSymLinks MultiViews
SSIが実際に使えるか試してみよう。次のコードをviに打ち込んで「test.shtml」のような名前で保存する。拡張子が「.html」ではなく、「.shtml」であるところに注意。保存したらブラウザからそのファイルを開いてみる。ブラウザの環境変数がずらずらと表示されるはずだ。
<html> <body> <pre> <!-- #printenv --> </pre> </body> </html>

SSIの活用法
ちなみにSSI(Server Side Include)とは、クライアントからデータの要求を受けたとき、ウェブサーバーで何らかの処理をほどこしてからクライアントに送信する技術のこと。たとえば、このウェブサイトではすべてのページに同じタイトルロゴやメニュー、バナー広告を貼り付けているけれど、その部分のHTMLコードは別ファイルにしている。そして、本体のHTMLファイルの中に<!--#include file="××" -->と書き込んでおくだけで、別ファイルの内容が埋め込まれる。
もちろんテンプレートを用意しておいてもいいのだが、SSIを使えばすべてのページのメニューをいっせいに書き換えることも可能になる。このサイトでは左側にほかのページへジャンプするためのメニューを設置しているが、もしSSIを使わなければ新しいページを追加するたびにすべてのページを編集し直さなければならない。しかし、メニューの部分を別ファイルにしてSSIで取り込むように設定しておけば、1つのファイルを変更するだけですべてのページに変更が反映される。
詳しくはこちらのサイト「HTMLの共通部分をSSIで効率管理」を参考にしてほしい。SSIはファイルを埋め込む以外にも外部のプログラムを実行したり、さまざまな機能が用意されている。使いこなせればウェブサイトの表現力がぐんとアップするだろう。
さて、SSIで処理を行うファイルは拡張子がshtmlになっているはず。だが、このサイトでは拡張子がhtmlのファイルにもSSIが働くようにサーバーの設定を変更している。本当はこんな設定を行うとサーバーに無駄な負荷がかかるので避けるべきなのだが、このサイトではすべてのファイルがSSIを利用するようにデザインしたので、ちょっと強引に設定を変更してみた。
拡張子htmlでもSSIを使えるようにするには、htmlファイルを保存したディレクトリに「.htaccess」というファイルを作成し、そこに「AddType text/x-server-parsed-html .html」と書き込んでおく(もし.htaccessがすでに存在するなら記述を追加する)。これでそのディレクトリにあるhtmlファイルにもSSIが有効になった。ちなみ、その下の階層にあるディレクトリにも設定が及ぶので注意する。