ども!いっとくです!
初めてSSI(サーバーサイドインクルード)というものの設定をしました。いつまでやっても知らないことが出てきますね〜
環境は以下の条件でやっています。
- Cent OS 7.5
- Apache2.4.6
SSI(サーバーサイドインクルード)って何よ?
まずはSSIとは何かという話から。
例えばこんな感じの構成でHTMLが配置されていたとさ。
html
├ index.html
└ header.html
そしてHTMLの中がこうなっていたとさ。
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<!--#include virtual="/header.html" -->
<main>何かあるよー</main>
<footer>何かあるよー</footer>
</body>
</html>
header.html
<header>何かあるよー</header>
さて、index.htmlに <!--#include virtual="/header.html" -->
という謎のコードがありますね。
SSIというのは、Apacheがこのコメントの部分をいい感じに解釈して、対応するファイルを結合して表示してくれるという機能の事です!
上述のような書き方をするとindex.htmlの <!--#include virtual="/header.html" -->
の部分がheader.htmlの内容に変換されて結合されて最終的に呼び出すときには以下のようなHTMLを返してくれます
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<header>何かあるよー</header>
<main>何かあるよー</main>
<footer>何かあるよー</footer>
</body>
</html>
ただのHTMLなのにテンプレートエンジンみたいなことが出来るんですねー。便利!
これで共通ファイルを切り出すことができますね〜
SSIの設定方法
SSIはApacheの設定をすることで実装できます。
httpd.confみたいな設定ファイルに書いても出来るし、.htaccessによる上書きを許可しているのであれば、そちらでも実装できるらしい。
今回はhttpd.confで設定したので、そちらの設定方法です。
CentOS7の場合、設定ファイルが /etc/httpd/conf
にあると思うので、まずはそこを編集しましょう。
$ sudo vi /etc/httpd/conf/httpd.conf
OSによって設定ファイルの位置が異なると思うので、そこは適宜環境によって合わせましょう。
httpd.confで対象のファイルが置いてあるディレクトリの設定を以下のようにします。今回の場合はよく使うであろう/var/www/html
にソースを配置している設定です。
<Directory "/var/www/html">
Options Includes FollowSymLinks
AllowOverride None
Require all granted
AddType text/html .html
AddOutputFilter INCLUDES .html
</Directory>
それぞれの設定内容は以下のような感じです
Options … IncludesでSSIを有効にしています。FollowSymLinksはシンボリックリンクのやつで今回のとは関係ないはず。
AllowOverride … .htaccessを許可するかどうか。SSIとは関係なさげ
Require all granted … アクセスの権限関係のやつ。これもSSIとは関係ないはず
AddType … text/html .htmlのファイルがインクルードできるようになりますよーっていう指定
AddOutputFilter … これもhtmlのファイルをインクルード出来るようにする設定。
太字のところがSSIと関係ある設定の部分です。
設定が完了したら保存して、sudo systemctl restart httpd
で再起動しましょう。
動かないよーって場合はモジュールが読み込まれていない可能性があるので
$ sudo find / -name mod_include.so
でモジュールを探し、httpd.conf
もしくはモジュールの読み込みを記述しているconfに
LoadModule include_module モジュールのパス
を書き込んで再起動しましょう。
ちなみに僕が今回いじった環境ではモジュールのパスが /usr/lib64/httpd/modules/mod_include.so
だったので
LoadModule include_module /usr/lib64/httpd/modules/mod_include.so
をconfに追記しました。
apacheのファイル触るの慣れなすぎて怖いですが、ちゃんと動くと気持ちいいですね〜
ちなみにSSIはレスポンス遅くなるらしいので、そこは注意が必要かも知れません(そこまで気にするほどでもない気はしますが)
以上、いっとくでした!よいエンジニアライフを!
コメント