SSIが動きません

★使い方を間違っています

 SSIはServer Side Includeの略で、HTMLファイルの中にSSIコマンドを記述し、サーバーに処理させる仕組みです。詳しくはとほほのWWW入門のSSIの項などで見てください。

 SSIに関しては、サーバーの環境よってサポートされる内容が大きく異なります。ですので、自分の利用するサーバーの情報をしっかり押さえておく必要があります。

 トクトクに関しては、次に説明する情報さえしっかり押さえておけば、大丈夫でしょう。


■ トップページのSSIが動作しません

★SSIは .shtml のファイルでのみ動作します。

 トクトクでは、SSIを動作させるにはファイルの拡張子を .shtml にしなければいけません。
 .htaccess もトクトクでは動作しませんのでこれは変更不可能です。
 また、トップページは index.htm , index.html の形式しか許されていませんので、トップページにSSIを利用することはできません。

 一番初めのページにSSIを利用したい場合はトップページから
<META HTTP-EQUIV='Refresh' CONTENT='0;HREF=index.shtml'>
などを利用してジャンプさせるようにするしかありません。
(当然のことながら、この場合はreferer情報などは取れなくなります)


■ SSIに引数が渡りません

★#include virtual を使えば大丈夫です。

SSIでどのような書式が使えるかは、サーバー環境によって異なります。
トクトクでは以下のとおりです。

動作書式HTTPヘッダー
<!--#exec cgi="xxx.cgi"-->必要
×<!--#exec cgi="xxx.cgi arg1 arg2"-->−−
×<!--#exec cgi="xxx.cgi?arg1+arg2"-->−−
<!--#exec cmd="xxx.cgi"-->不要
×<!--#exec cmd="xxx.cgi arg1 arg2"-->−−
<!--#include file="xxx.cgi"-->必要
×<!--#include file="xxx.cgi arg1 arg2"-->−−
<!--#include virtual="xxx.cgi"-->必要
<!--#include virtual="xxx.cgi?arg1+arg2"-->必要

CGIに引数を渡す時には、#include virtual を使いましょう。

また、<!--#include virtual="xxx.cgi?arg1+arg2"--> の場合、CGI実行時に参照可能な各変数の値は以下のようになります
変数
$ARGV[0]arg1
$ARGV[1]arg2
$ENV{QUERY_STRING}arg1+arg2

#exec cmd 形式で呼び出す仕様のCGIを #include virtual 形式で呼び出す為には、HTTPヘッダーを出力するように改造する必要があります。
 大抵の場合、2行めに次の一行を追加するだけで大丈夫でしょう。

print "Content-Type: text/plain\n\n"; # HTTPヘッダーの出力


■ SSIでエラーになります。

★ 次のことを確認してください。

  1. SSIの対象ファイルへのパスはあってますか?
  2. 拡張子はトクトクで使用可能なものですか?
    SSIの動作構造上、インクルード/実行されるファイルは「HTTP的」に解釈されるので(#exec cmdを除く)、トクトクで使用を許されていない拡張子を使用した場合にはエラーになります。
    参照:トクトクで使用可能な拡張子
  3. HTTPヘッダーは出力されていますか?
    実行するCGIはHTTPヘッダーを出力する仕様になっていますか?
    呼びだし形式とHTTPヘッダーの必要性の対応は前項を参照してください。


戻る