2008年1月28日(月)

インフォシークiswebライト備忘録

インフォシークiswebライトでは、cgi-binディレクトリ以下のファイルは、例えばGoogleの検索結果のウェブページといった、infoseek.co.jp外のインターネット上のウェブページ、つまりドメイン外から直接呼び出されない。
cgiファイルであってもhtmlファイルであっても同様だ。

また、SSI(shtmlファイル)はサイト内のどこにあってもドメイン外から直接呼び出されると、[an error occurred while processing this directive]、とエラーを吐き出してHTML文書内に挿入されたcgiファイルの実行を止める。
そこで、cgi-binディレクトリ以外に設置したshtmlファイルが、ドメイン外から直接呼び出されても挿入されたcgiファイルを実行させる方法を愚考した。
試しに、各記事のページが動的生成されるRingBlog過去記事、サンプル)を利用。
まず、ドメイン内から直接呼び出されれば挿入されたcgiファイルを実行させるが、ドメイン外から直接呼び出されるとエラーを吐いたshtmlファイルの中身はこんな感じ。

<!--#include virtual="/header.txt"-->
<!--#include virtual="../../cgi-bin/ringblog/blog.cgi/1"-->
<!--#include virtual="/footer.txt"-->

これを以下のとおり修正したら、エラーを吐かなくなった。
http://hiro04267.at.infoseek.co.jp/ringblog/archives/1.shtml

<!--#include virtual="/header.txt"-->
<script type="text/javascript">
<!--
var ref = '<!--#echo var="HTTP_REFERER"-->';
if ((ref.indexOf('http') != -1) && (ref.indexOf('infoseek.co.jp') == -1)) {
location.href = location.pathname;
}
//-->
</script>
<!--#include virtual="../../cgi-bin/ringblog/blog.cgi/1"-->
<!--#include virtual="/footer.txt"-->

実際にはエラーを吐き出そうとするのだが、その前にJavaScriptがSSIで取得したリファラを読んですぐリロードしてくれるんで、閲覧者が焦らないという仕組み。
Internet Explorer6、Firefox2及びOpera9ではこのJavaScriptが上手く動作してくれたが、これらの別のバージョン又はKHTML系(例:Safari)等のその他ウェブブラウザではどう動作するのかが読めないんで、困ってる。
また、Googlebot等のクローラがどこまで理解してくれるか不明だ、というか理解してくれないだろう。
だからJavaScriptに頼らない、もっと簡単でスマートな方法はないのかな、と思う。
インフォシークiswebライトで.htaccessが使えれば何か方法がありそうだが…。

Tags :

Posted by 不法電波 at 00:56
Categories: インターネット | 楽天
Comments | Trackbacks

Extended Notes

先に書いた本文の方法は、インフォシークiswebライトでは誰でも考えられるものだ。
一方、SSIプロジェクトページというウェブページを覗かせてもらったら、<!--#set var="no_referer" value="1" -->、というインフォシークiswebライトだけで有効なお呪いが…。
これを以下のとおり挿入したら、今まで上手くいかなくて諦めた#if exprによる制御構文がエラーを吐かなくなったから、不思議。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--#include virtual="/header.txt"-->
<!--#set var="no_referer" value="1"-->
<!--#if expr="($HTTP_REFERER != /http/) && ($HTTP_REFERER = /infoseek.co.jp/)"-->
<meta http-equiv="Refresh" content="0;URL=/ringblog/archives/1.shtml"/>
<!--#else -->
<!--#include virtual="../../cgi-bin/ringblog/blog.cgi/1"-->
<!--#endif -->
<!--#include virtual="/footer.txt"-->

DOCTYPE宣言がcgiファイルの吐き出したソースとカブってるのは、愛嬌という事で。
でも、この方法ならブログウェアだろうがWikiだろうが、憂いなく動的生成をSSIで静的生成にできるかも。
って言うか制御構文使わ(ry
とにもかくにも、midoriyaさんに多謝!

Posted by 不法電波 at 2008年2月2日(土)01:27

TopBottom

Trackbacks

Trackback URL:
http://ventura.pv.land.to/tt-cgi/tt_tb.cgi/86

TopBottom

Comments






保存しますか? Yes No


(URL以外は入力必須、過少コメント・連続投稿は不可)

TopBottom

< TrackBack Technical Specification | Home