小規模Webサイト向け CMS 「すぐ使えるCGI」のサポート情報

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

最終更新日: 2014-02-08

問題となる SSI エラー

SSI (Server Side Include) で別のファイルをホームページに組み込もうとしたら「an error occurred while processing this directive」というエラーが表示される。

SSI エラーの原因

「an error occurred while processing this directive」のエラーは、SSI は有効になっていて、何らかのエラーで SSI の処理ができなかった場合に表示されます。いくつか原因となるパターンがありますので、下記のポイントをご確認下さい。

「an error occurred while processing this directive」の考えられる原因

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

SSI 基本の構文

まずはSSIの構文のパターンについてご説明します。SSI で一つのHTMLファイルに他のファイルの内容を組み込むための構文は以下の通りです。

安全なSSIコマンド

一番良いのは、組み込み先のファイルを指定する属性として「virtual」を使用する方法です。相対パスが使え、CGI の出力なども表示に組込む事ができます。

<!--#include virtual="webdir/index_short.html" -->


※「すぐ使えるCGI」の新着情報の場合、「webdir/index_short.html」の部分は書き出した「短い一覧」を指定して下さい。

非推奨の方法

組み込み先のファイルを指定する属性として「file」を使用する方法もあります。これは比較的古い方法で、最近のサーバでは非推奨となっている場合が多いようです。また、後述するように、同じ設定が上の「virtual」ではエラーにならないのに「file」にするとエラーになる場合もあります。これから設定する場合は「virtual」の方をお使い下さい。

<!--#include file="webdir/index_short.html" -->

考えられるSSIエラーの原因1: ファイル指定の間違い

ディレクトリ名やファイル名を間違えているとこのエラーが表示されます。
指定してるURLにブラウザから直接アクセスし、正常な表示ができるか確認して下さい。

エラー例:拡張子が異なる

<!--#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" -->

関連リンク

さらに詳しく