問題となる SSI エラー
SSI (Server Side Include) で別のファイルをホームページに組み込もうとしたら「an error occurred while processing this directive」というエラーが表示される。
SSI 基本の構文
エラーの原因の前に、まずはSSIの構文のパターンについてご説明します。SSI で一つのHTMLファイルに他のファイルの内容を組み込むための構文は以下の通りです。
安全なSSIコマンド
一番良いのは、組み込み先のファイルを指定する属性として「virtual」を使用する方法です。相対パスが使え、CGI の出力なども表示に組込む事ができます。
<!--#include virtual="webdir/index_short.html" -->
非推奨の方法
組み込み先のファイルを指定する属性として「file」を使用する方法もあります。これは比較的古い方法で、最近のサーバでは非推奨となっている場合が多いようです。また、後述するように、同じ設定が上の「virtual」ではエラーにならないのに「file」にするとエラーになる場合もあります。これから設定する場合は「virtual」の方をお使い下さい。
非推奨の設定 "file"
<!--#include file="webdir/index_short.html" -->
SSI エラーの原因
では、エラーの原因と対処方法を見ていきます。
「an error occurred while processing this directive」のエラーは、SSI は有効になっていて、何らかのエラーで SSI の処理ができなかった場合に表示されます。いくつか原因となるパターンがあります。
「an error occurred while processing this directive」の考えられる原因
考えられるSSIエラーの原因1: ファイル指定の間違い
ディレクトリ名やファイル名を間違えているとこのエラーが表示されます。指定してるURLにブラウザから直接アクセスし、正常な表示ができるか確認して下さい。
エラー例:拡張子が異なる
.html を .htm と取り違えている場合や、単純なスペルミスの場合があります。
<!--#include virtual="webdir/index_short.htm" -->
エラー例:ディレクトリ名の間違いやディレクトリの階層の記載の間違い
ディレクトリ名の思い違いや、階層違い、ディレクトリ名を付け忘れている場合があります。
<!--#include virtual="web_dir/index_short.html" -->
<!--#include virtual="index_short.html" -->
考えられるSSIエラーの原因2: ディレクトリを遡っている
「file="(ファイル名)"」の形式で読み込むファイルを指定している場合、ディレクトリを遡る事ができません。結果として同じディレクトリより下の階層を指定している場合もエラーになります。
エラー例:上のディレクトリを指定、または経由している
<!--#include file="../topics/webdir/index_short.html" -->
<!--#include file="../index_short.html" -->
対応方法
「file」を「virtual」に変更して下さい。
SSI 指定例:ディレクトリをさかのぼる場合
<!--#include virtual="../index_short.html" -->
考えられるSSIエラーの原因3: サーバルートからのパスを指定している
「file="(ファイル名)"」の形式で読み込むファイルを指定している場合、スラッシュ「/」から始まるサーバルートからのパスは指定できません。原因2と同様、結果として同じディレクトリより下の階層を指定している場合もエラーになります。
エラー例:サーバルートからのパスを指定している
<!--#include file="/topics/webdir/index_short.html" -->
<!--#include file="/index_short.html" -->
対応方法
「file」を「virtual」に変更して下さい。
SSI 指定例:サーバルートからのパスを指定する場合
<!--#include virtual="/topics/webdir/index_short.html" -->
考えられるSSIエラーの原因4: http から始まる URL を指定している
SSIの組み込み先として http から始まる URL は指定できません。同じサーバ内のファイルを指していたとしてもエラーになります。
エラー例:http から始まる URL を指定している
<!--#include virtual="http://www.example.com/topics/webdir/index_short.html" -->
対応方法
ホスト名を含まないパスに変更して下さい。
SSI 指定例:ホスト名を除きサーバルートからのパスを指定する
<!--#include virtual="/topics/webdir/index_short.html" -->