owned mediaウェブ制作に役立つコンテンツを発信中!

Apacheで使うshtmlとSSI(Server Side Includes)について

最終更新日: Update!!
最近ある案件で見慣れない仕様があったので調べてみますと、SSI(Server Side Includes)と呼ばれる機能を知ったので備忘録として残しておきたいと思います。最近ではあまり見かけないようなのですが便利な機能でもあったりするようです。  
ウェブサーバー内で実行できる機能のSSI
SSIはServer Side Includesの略で、ウェブサーバー内で実行することができる機能です。例えば、変数の値を出力したり、Linuxのコマンドを実行したり、外部ファイルをインクルードしたりすることができます。このSSIですが、HTMLファイル内に下記のような形で記述します。
<!--#[command] [attribute]="[value]" -->
  ちょうどHTMLのコメントのような形になります。#の直後にあるコマンドにはいくつか用意されている実行機能を指定し、それに対応した属性と値を指定することになります。コマンドには主に以下のようなものが用意されています。  
config システムのフォーマットを設定する
echo 指定した値を出力する
exec 指定したコマンドを実行する
include ファイルをインクルードする
  これらを使うことでいろんな機能が実行できるようになります。例としていくつかサンプルをあげてみます。
// 例:現在の日時を表示する
<!--#echo var="DATE_LOCAL" -->

// 例:コマンドでディレクトリ内のリストを出力する
<!--#exec cmd="ls" -->

// 例:外部ファイルのインクルード(同ディレクトリの場合)
<!--#include file="sample.html" -->

// 例:外部ファイルのインクルード(他ディレクトリの場合)
<!--#include virtual="../html/sample.html" -->
   
.htaccessを編集してSSIを使えるようにする
SSIは初期状態では使えませんので、サーバー設定ファイルや.htaccessファイルを編集する必要があります。これら編集部分をまとめてみますと下記を追加する形になります。 【.htaccess】
Options IncludesNOEXEC
AddType text/html .shtml
AddHandler server-parsed .shtml
  まずオプションの「IncludesNOEXEC」でSSIを有効にして、かつEXECの実行を無効にさせます。「Includes」だけですとEXECのコマンド実行を許可することになるのでセキュリティリスクが高まりますので注意が必要です。   次に「shtml」の拡張子を追加して有効にし、SSIの対象ファイルと設定します。SSIは通常のHTMLファイルでも使えるのですが、その場合は他のすべてのHTMLファイルが対象になるのでセキュリティリスクが高まります。ですので、SSIを実行する対象は「shtml」の拡張子を持ったファイルに限定しておくと良いようです。  
  セキュリティリスクもありサーバー側での処理はPHPで対応するケースが多いので、あまり最近では少なくなっているようですが、豆知識として覚えておくと便利かもしれませんね。   (参考サイト) Apache チュートリアル: Server Side Includes 入門 SSIの仕組みと有効化・制限の設定
  • はてなブックマーク
  • Pocket
  • Linkedin
  • Feedly

この記事を書いた人

Twitter

sponserd

    keyword search

    recent posts

    • Twitter
    • Github
    contact usscroll to top
      • Facebook
      • Twitter
      • Github
      • Instagram