ROUTE286 - http://r286.com/

2 8 6 - ROUTE286 の後継ブログ。

今後は 2 8 6 で記事投稿・ブログ公開を行います。
ROUTE286 の新たな記事投稿は行われませんが、修正等は行います。

SSI でブラウザ別表示やメニュー表示を実現する。

ROUTE286 - トップ ウシの声(インターネット)
サイト連携 [RSS]

書込 - 2007年07/01/12 15:58

Web サイトのコンテンツ構築として多いのは CGI(Perl) や PHP ですね。
企業レベルだと Java サーブレットや ASP もありますが……。
でも実は SSI だけで実現できる事もある事を知らない人も多いかもしれません。

以下の事は SSI だけで実現する事ができます。

・ブラウザに応じて表示を変える
・表示しているファイルに応じて表示を変える共通メニュー等


Apache 1.2 より SSI では if 文を使う事ができます。
現在サーバとして動作している Apache は 1.3 以降なはずなので、
SSI が使える Apache のサーバであれはこの方法は使えるはずです。

まずはブラウザに応じて「ブックマーク・お気に入りに追加」を表示させるとか。
$ を頭につけると環境変数、また // で囲むと正規表現ができます。
Perl では =~ としますが、SSI では正規表現でも = です。

ちなみにここを見ている方なら分かると思いますが、
現在見ている環境での HTTP_USER_AGENT は

CCBot/1.0 (+http://www.commoncrawl.org/bot.html)

となります。google のキャッシュなら googlebot になってるかと……

<!--#if expr="$HTTP_USER_AGENT = /MSIE/ && $HTTP_USER_AGENT = /Windows/" -->
<a href="javascript:window.external.AddFavorite('http://r286.com/','ROUTE286')">お気に入り に登録する</a></tt><br>
<!--#endif --><!--#if expr="$HTTP_USER_AGENT = /Firefox/" -->
<a href="javascript:window.sidebar.addPanel('ROUTE286','http://r286.com/','');">ブックマーク に登録する</a><br>
<!--#endif --><!--#if expr="$HTTP_USER_AGENT = /Opera/" -->
<a href="http://r286.com/" rel="sidebar" title="ROUTE286">ブックマーク に登録する</a><br>
<!--#endif -->

実際に実行してみると以下の通りです。


これを使えばわざわざブラウザ別にページを用意する必要はないんですね。

また、include に SSI を含んだ HTML を指定した場合、
include された HTML にも SSI を動作させる事ができます。


環境変数は CGI・PHP 等と同様に得られますので、
例えば共通メニュー menu.shtml を用意します。
以下は index.shtml がトップ、info.shtml がお知らせで
表示しているページを強調、そうでないところはリンクにします。

<!--#if expr="$DOCUMENT_NAME = index.shtml" -->
<b>トップ</b>
<!--#else -->
<a href="index.shtml">トップ</a>
<!--#endif -->
<!--#if expr="$DOCUMENT_NAME = info.shtml" -->
<b>お知らせ</b>
<!--#else -->
<a href="info.shtml">お知らせ</a>
<!--#endif -->

ディレクトリをまたぐ場合は DOCUMENT_URI で処理すると良いですね。
もちろん正規表現も可能です。
この menu.shtml を各ページから include で読めばいいわけです。

<!--#include file="menu.shtml"-->

ディレクトリがある場合は include virtual の方が良いですね。

この ROUTE286 も表示部分はほとんど SSI を用いています。
多くの blog は Perl・PHP、あとは Ruby あたりかと思います。
さすがにコメント等の書き込みや検索は他の言語でないといけませんが、
やる気になればここまでできますよ〜という感じで。^^;;;
Apache 単独で処理されるので、
他の言語よりダントツに高速で処理されるわけです。^^v
サーバ負荷も軽減されますよ。

コメント・トラックバック ( 0 )

トラックバックURL: http://r286.com/katari/665
(日本語・文字コード自動判別)
トラックバックを正常に行っていないものや悪質性があるもの等は編集・削除する場合があります。
逆に内容の良い記事からのトラックバックや興味を持ったコメント等は
ADMIN @ ROUTE286 がツッコミを入れている事があります。
ROUTE286 上で公開されなくない返事や運営者へのお問い合わせ等は こちらのフォーム を用いて下さい。
以下のフォームはコメントでの利用ははもちろん、
トラックバック機能がない blog で以下のフォームをトラックバック代わりにしていただいても結構です。



表題 / 題名


概要 / 内容


サイト(ウェブログ)URL 省略可


サイト(ウェブログ)名 / 名前


「route/665」を半角で入力して下さい





ROUTE286 はオリジナルのシステムで動作しています。
Presented by ROUTE286. ROUTE286 トップ お問い合わせ