SSI未対応のプロバイダでログ解析CGIを実行するには?

[上に] [前に] [次に]
ヘラクレス [E-Mail] [HomePage] 2000/01/12(水) 00:16:25
プロバイダはニフティーを使用しているのですが、
CGIは使えるのですが、SSIは未対応みたいで困っています。
アクセスログ解析を作ってみたのですが、index.htmlが開かれた時に
カウントようのlog.cgiを呼び出したいと思っています。
javascriptのdocument.writeを使えば行けるかも!
と思い
<script language="JavaScript1.2">
<!--
document.write("<IMG SRC='http://www.***.nifty.com/***/log.cgi"+document.referrer+"' width=1 height=1>");
// --></script>
上記の様にindex.htmlに書きこんだのですが、カウントされません。
実際にlog.cgiのURLにアクセスするとカウントされるのでCGIに
ミスは無いと思っています。
何か良い方法がありましたら、知恵をお貸しください。

andi 2000/01/12(水) 00:23:30
このままだと例えばヤフーからのアクセスだと
http://www.***.nifty.com/***/log.cgihttp://www.yahoo.co.jp/
ってなるからじゃないですか?
cgiのあとに?を付けると良いと思います。
あとさらに?をエスケープしたりする必要もありますが、
詳しくはここの過去ログを探したらでてきそうです。

気まぐれ 2000/01/12(水) 00:44:40
さらに付け加えると、JavaScript1.2 だと効果が少ないような・・・

あたしゃ log.cgi の代わりに カウンターにその機能を付けて
こうしてますが・・・

<SCRIPT LANGUAGE="JavaScript">
<!--
var ref = document.referrer;
document.write('<IMG SRC="http://www.hoge.com/~foo/cgi-bin/counter.cgi?'+ref+'">');
//-->
</SCRIPT>
<NOSCRIPT>
<IMG SRC="http://www.hoge.com/~foo/cgi-bin/counter.cgi?ScriptOff"><br>
</NOSCRIPT>

#この方法だと一部のIE4が、最初に ScriptOff でアクセスした直後に
#もう一度スクリプトを On の状態でもう一度読み込んでいる様です
#なんで ? をエスケープするのかと思ったけどサーチエンジンから来
#た場合のキーワードを取る時ね、でもこれだけでも結構イケますよ

ヘラクレス 2000/01/12(水) 00:45:33
すいません、?は一度つけてみました。
でも、だめだったんです。
エスケープについては、エスケープって言うのを検索して
一通り目を通したのですが、良く分からなかったです。
具体的に教えてください。
unicodeの事なんでしょうか?

気まぐれ 2000/01/12(水) 00:57:16
エスケープするってのは、本来漢字やいつかの記号を UR Lの部分に
使用していけないって規定?が有るから %02 だとかの文字に置き換
えて使います。

つまり、Yahoo 等の検索エンジンでの検索時のキーワードをそのまま
ロギングする事が可能ってこと。
必要ないなら、log.cgi で ? 以降をカットしちゃえばいいし、そんな
に細かくログを取らなけりゃ無視しても良い

andi さんが言ってるのは、JavaScript で生成した URL が正当じゃ
ないって事。試しに最初の例で WIDTH と HEIGHT の指定を外してみ
ればいい、多分 Not Found になってるから。

最初の例では、CGIを指す URL とデータを区切るための ? が抜けて
るって事です。

気まぐれ 2000/01/12(水) 00:58:30
あいや!
>いつかの記号を
>いくつかの記号を

Selly 2000/01/12(水) 01:56:40
Content-Typeはちゃんと出力していますか?
SSI用と言うことで、なにも出力してないような気がするのですが。
CGIとして呼び出される以上、ヘッダにContent-Typeが出力されてないとServer Errorが発生します。

ヘラクレス 2000/01/12(水) 19:53:09
う〜ん、解決しない(t_T
もともと、CGIで動作させるつもりだったので、
ちゃんと
print"Content-type: image/gif\n";
print"Content-length: $tt\n\n";
print <IMG>; close(IMG);
って最後の方に書いてます。
上記が合ってるかどうか自身は無いですが・・・・

[上に] [前に] [次に]