SSI のエラー 「an error occurred while processing this directive」の原因と解決方法

問題となる 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」の考えられる原因

  1. ファイル指定の間違い
  2. ディレクトリを遡っている
  3. サーバルートからのパスを指定している
  4. http から始まる URL を指定している

考えられる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" -->

関連記事

SSI と <iframe> の比較

応用マニュアル CMSサイト設計
ホームページ(トップページ)に新着情報を表示する際に、SSI(Server Side Include)とインラインフレーム(<iframe>)はどちらがいいのかを考えます。

SSI (Server Side Include) を拡張子 .html で使う方法

応用マニュアル CMSサイト設計
SSI(Server Side Include)を 拡張子 .html のままで使う方法。

広告