• ベストアンサー

リンク元を調べるCGIの作り方で悩んでいます

はじめまして。Perl暦1ヶ月の者です。 自分のサイトのリンク元を調べるCGIを設置しようと思いますがどんな方法があるでしょうか。 私が調べた方法は、 1.CGI+SSIを利用 2.CGI+インラインフレームを利用 ですが、1.は各ページに <!--#exec cgi="○○.cgi"--> を入れてCGIを起動させるわけですが、全ページが.shtmlとなってしまい抵抗を感じます。.htm → .shtmlと変わることにより当分検索順位が下がるかもしれません。 それで2.を試しました。通常ページ page1.htm にインラインフレームで○○.cgiを埋め込み、ここでカウンターを表示させるとともにログを取得しようと思ったのです。しかしHTTP_REFERERが取得してくれるリンク元はあくまで「page1.htm」ですので役に立ちません。 最も一般的な方法はどのようなものでしょう?詳しい方よろしくお願いいたします。m(_"_)m *できればコードを丸ごと教えていただけると助かります。 ↓作成の条件です↓ ・一般ページはあくまで.htm にしたい。 ・レンタルサーバー屋はSSIは.shtmlと言っている。 ・リンク元一覧は一般ページには表示しない。 ・全ページの外部リンク元を知りたい。

  • Perl
  • 回答数7
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
noname#205944
noname#205944
回答No.7

JavaScriptでの例です(とてもめんどうなことになってますが) #----------- リファイラーをとるページ <html> <body> <script src="js.cgi"></script> </body> </html> #----------- 受け取るCGI (js.cgi) print <<HTML; Content-Type: application/x-javascript\n rf = parent.document.referrer; //フレーム内なら top.document.referrer document.write(rf); //ページに表示するならば logurl = "js2.cgi?ref="+rf; document.write('<script src="' + logurl + '"></script>'); HTML __END__ #----------- 記録するCGI (js2.cgi) use CGI qw (:standard); $ref = param('ref'); open FH, ">>js.txt"; print FH "$ref\n"; close FH; __END__ 欠点 : JavaScriptを使えないまたはOFFにしているユーザの情報は得られない とりあえず、テストをしてありますので うまくいくこと請け合います

takosuke88
質問者

お礼

さっそく試させていただきます。ありがとうございました。

その他の回答 (6)

回答No.6

imgタグを使うと、そこからリクエストされるcgiに対してのREFERERはimgタグが書かれたページになってしまうようです。 そのサーバーにはrewriteモジュールは入っていますか?もし入っていれば*.htmというリクエストを.shtmlに飛ばす事はできます。もし入っていれば.htaccessで定義できるので、これもレンタルサーバーに問い合わせてみてください。

takosuke88
質問者

お礼

その辺についてももう少し勉強いたします。ありがとうございました。

  • makoto44
  • ベストアンサー率27% (18/66)
回答No.5

> でも文字だけでいいのにimg srcをつかってるあたりからしてわからないのですが… <img src="○○.cgi">は、アクセスカウンターを設置する場合に使用する手法です。 アクセスカウンターCGIにHTTP_REFERERを取得するように表記するのでいかがでしょう?

takosuke88
質問者

お礼

その方法も勉強します!ありがとうございました。

回答No.4

No.2 です。 >1と2に興味があります。詳しい情報教えていただけませんでしょうか? その1:window.location.href を設定すれば指定のページにすっ飛ばせます。 http://www.openspc2.org/JavaScript/ref/window/location.htm ページ転送には META タグを使う方法もありますね。 その2:サーバの設定が弄れる前提なので、これができるかどうかはレンタルサーバ業者に聞いてみて下さい。.htaccess で MIME 設定を変更できるところもあるようですが、MIME タイプって何?.htaccess って何?については別途質問を立てた方がいいでしょう。そもそも Apache かどうかも分かりませんし、やっぱりレンタルサーバ業者に聞いてみるのが早いですね。 http://www.shtml.jp/htaccess/ No.3 さんのおっしゃるように JavaScript 経由での情報収集及びアクセス解析を提供しているサービスを利用するのが一番手っ取り早いと思いますよ。

takosuke88
質問者

お礼

参考にさせていただきます!ありがとうございました。

回答No.3

その、リンク元を調べるcgiは選択の余地がないんでしょうか。恐らくSSIで設置する前提で作られたCGIでしょうから、他の方法では難しいかな、と思います。 でも忍者ツールのように、JavaScriptで設置をするようなツールもあります。これでしたら拡張子が変わる事はありません。こういうものの利用を検討してみてはいかがでしょうか。

参考URL:
http://www.shinobi.jp/
takosuke88
質問者

補足

m(_"_)m重要なこといい忘れました。スキルアップ目的なので既存のプログラムは使えないんです…

回答No.2

その1:全ての現存 .htm に JavaScript なりで .shtml に無条件ですっ飛ばす設定を行う(これで検索エンジンなどからの来訪者が路頭に迷う事はない).shtml で SSI を使って REFERER 取得。 その2:.htm の MIME タイプを cgi-script にして、「.htm 拡張子だけど実は cgi が動いている」状態にする(サーバ側の設定が弄れなければ無理) その3:レンタルサーバ業者に定期的に REFERER 付のアクセスログを送付してもらい、これを別途解析。 その4:レンタルサーバ業者が実はアクセス解析ページを提供している。 その3、その4が一番普通のやり方だと思いますよ。

takosuke88
質問者

補足

ありがとうございます。 m(_"_)m実はCGIスキルアップのための作成でして、1と2に興味があります。詳しい情報教えていただけませんでしょうか?

  • makoto44
  • ベストアンサー率27% (18/66)
回答No.1

そのCGIが通常に作動するか分かりませんが、 <img src="○○.cgi"> とイメージファイルを読み込ませるような形でいかがでしょうか?

takosuke88
質問者

補足

ご回答ありがとうございます。 確かにあちこちの本を見ると<img src="○○.cgi">で記述してありますね。でも文字だけでいいのにimg srcをつかってるあたりからしてわからないのですが…

関連するQ&A

  • フレームページでSSIを使ってアクセス解析

    フレーム内ページ(main.shtml)にSSIを使ってリンク元を取得したいのですが、どなたか良い方法はないでしょうか。フレームページはindex.htmlです。 SSIでなければ"parent.document.referrer"を使ってCGIで取得するのは設置したことはありますが、SSIだとリンク元が親フレーム情報しか得られません。なんとかSSIでやりたいのですが…。リンク元以外の取得はできますがリンク元が取れません。SSIの現在の記述は下の通りです。 <!--#exec cgi="./acc.cgi"--> どうぞ、暑いのにすいません、教えてください。

    • 締切済み
    • CGI
  • スクリプトのリンク元

    スクリプトを実行したリンク元のチェックで困っております。 SSIやimgタグで呼び出すカウンタを作っているのですが、その際にHTTP_REFERERを使うと、その呼び出しHTMLのURLではなく、その呼び出しHTMLのリンク元が表示されてしまいます。SSI、imgタグで呼び出したHTMLのURLを知ることが出来るでしょうか? つまりは、http://www.***.com/~user/index.shtmlからhttp://www.***.com/~user/chk.phpをSSIで実行したとします。その際にindex.shtmlのリンク元のURLではなく、http://www.***.com/~user/index.shtmlというSSIでスクリプトを実行したURLが知りたいのであります。 リンク元とは、yahooから検索でindex.shtmlに来た場合、http://www.yahoo.co.jp/と表示されるものです。 暇なときに回答くださいm(_ _)m 補足聞きたい方もお願いします。

    • 締切済み
    • PHP
  • 時間でリンクが変わるSSIとCGI

    お世話になります。よろしくお願い致します。 時間によって飛ぶリンク先を変えるCGIのスクリプトをSSIと組み合わせて考えていますが、頭が混乱しています。どなたか教えてくださいませ。 午前1時から午前5時までは違うページにしたいです。 <A href='<!--#exec cmd="jikan.cgi"-->' ><この時間の楽しいページ♪</A> というSSIを使ったリンクをSHTMLのページに作っておきます。exec cmdは使えます。 で、 jikan.cgiで、夜中はyonaka.htmlに飛ばせて、それ以外はhiru.htmlにリンクしたいです。 ちなみにyonaka.htmlは少しセクシーなページにしたいです(笑)。 yonaka.htmlには.htaccessでアクセス制限でリンク元からしか入れないようにする方法は知っています。つまり、前回yonaka.htmlに入った人がお気に入りに登録してもアクセスできないようにする方法は知っています。 jikan.cgiは、 $hour = (localtime(time))[2]; if ($hour > 1 && $hour < 5) { というよなあたりまでは良いでしょうか?…無知で恥ずかしいです(涙) あと少しとか思われるかも知れませんが、私には無限の彼方です(大涙) よろしくお願い致します。(レモン)

  • 携帯からアクセスがあった場合リンク元を取得するには

    携帯からHPにアクセスがあった場合、リンク元を取得する方法について教えて下さい。 パソコンの場合はJavaScriptやSSIで、リンク元を取得する事は可能ですが、携帯ではJavaScriptが使えないのでSSIしかリンク元を取得する方法はないでしょうか? 自分でサーバを立てた場合、サーバの設定によってはSSIでは取得できない携帯のリンク元も取得できる事もあるのでしょうか? 携帯によっては、リファラを送信する機種や送信しない機種があるようですが、結局はリファラを送信していない機種のリンク元を取得する事はできませんか? SSIで取得できない機種(リファラを送信しない機種)は、他に取得する方法はないのでしょうか。 現在SSIでリンク元を取得していますが、リンク元を取得できない事が多いので、これはアクセスしている機種の仕様で仕方ない事なのかなと思ったので。 どなたかアドバイスを頂けると助かります。 よろしくお願いします。

  • SSIでCGIを出力?

    今、インフォシークでHPを作ってます。 拡張子が.htmlのページの中に<iframe>で、小さくCGI(拡張子.cgi)を表示しているのですが、 そのCGIのページにも広告が入ってしまって、広告がいっぱい!となってしまいました。 インフォシークではフレームを使った場合の小さい方のページは.shtmlにしろ、とありましたが、CGIの拡張子を変えるわけにも行かず問い合わせをしたんです。 すると >CGIで出力させているフレームを.shtmlファイルにして、 >そこにSSIと同様の方法でCGIを出力させてください。 と返答がありました。 1行目の意味と、2行目のやり方が解かりません。 ・・・長くなってすみませんm(_ _)m

    • 締切済み
    • CGI
  • SSIでCGIを起動するには…

    同じ質問をしてましたが、回答がなかった為、カテを変えて質問します。 SSIを使いフレームみたいなページを作りました。 左側のメニューページをSSIで呼び出し、実行と言った感じです。 それで、掲示板などのCGIを右側のページに呼び出そうと思ったのですが、どうやっても出来ません。 画面は一応は呼び出せるのですが、画面がぐちゃぐちゃになっていて、そのCGIの書き込みすら出来ない状態です。 また、CGIを表示するHTMLを呼び出しても同じ結果でした…。 パーミションは変更しています。 またインラインフレームでは表示、書き込みは可能なのですが、 なんとかSSIで表示できないものかと悪戦苦闘です^^; この様な場合、どうすれば良いのか教えてください!! もしくは、設置に関するwebページなどがあったら教えてください!!

  • shtmlに埋め込むCGIファイルのDLについて

    shtmlファイル内に埋め込んだ<!--"exec cmd="./***.cgi"-->なんですが、 正常に実行されれば、この場所には実行結果しか返りませんが、 DLツールやその他行為で、SHTMLファイルをSSIの実行なしに落とすことはできりでしょうか? 要は、shtml内に埋め込んだ「***.cgi」などのファイル名を取得されないか、 という不安があるのです。

    • ベストアンサー
    • CGI
  • htmlから、ファイル、もしくはCGI実行結果を表示

    htmlのページを開いたときに、部分的にCGIの実行結果、もしくはファイルの中身を表示することは出来ないでしょうか。「インラインフレームを設けて・・・」という意味ではなく、たとえばページを開くごとにある行の数字だけ数字が増えていく、といったカウンターのようなことが出来るようにしたい。 そういうCGIスクリプトを作っているので、CGIをまったく使わないというのは無しで、またSSIは使わないこと前提でお願いします。

    • ベストアンサー
    • Perl
  • SSIを使ってCGIを呼び起こしたいのですが

    index.shtmlのタグにssiを使用したいのですが index.cgi?mode=m のようなパラメータもつけて実行させる場合 <!--#exec cgi="./index.cgi?mode=m"> ではだめなんでしょうか? [an error occurred while processing this directive] というエラーがでました。 どうかご教授ください。

    • ベストアンサー
    • CGI
  • SSIを使ってHTMLページにCGIを埋め込みたい

    使っているサーバーがSSIが使えるとの事で今回初めてSSIを使ってHTMLページにCGIを埋め込みたいと思い、色々なページを見ながら設置してはみてるんですが、 [an error occurred while processing this directive] となってしまいます。 やってみた事は test.shtmlを作り<BODY></BODY>の中に <!--#exec cgi="/navi/can.cgi"--> などとしてみたりしましたが上記のエラーが出てしまいます・・ 初歩的な質問なのかもしれませんが何が間違えているのかもわからなく、すみませんが教えていただけないでしょうか? よろしくお願いします。

    • 締切済み
    • CGI