SSIに関しては、サーバーの環境よってサポートされる内容が大きく異なります。ですので、自分の利用するサーバーの情報をしっかり押さえておく必要があります。
トクトクに関しては、次に説明する情報さえしっかり押さえておけば、大丈夫でしょう。
一番初めのページにSSIを利用したい場合はトップページから
<META HTTP-EQUIV='Refresh' CONTENT='0;HREF=index.shtml'>
などを利用してジャンプさせるようにするしかありません。
(当然のことながら、この場合はreferer情報などは取れなくなります)
| 動作 | 書式 | 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ヘッダーの出力