• 締切済み

Aのリンク先をクリックするとBのリンク先にアクセスできる機能

宜しくお願いします。 携帯向けのHPを作成しています。 ページを製作する際に、 Aのリンク先をクリックするとBのリンク先にアクセスできる機能を組み入れたいと思います。 TOPページからAリンク先をクリック→TOPページに戻り→Bリンク先にアクセス。 Aをクリックしない場合はBにアクセスできない。 という機能です。 こちらをつくるのは難しいでしょうか? CGIをつかわずに行うことは可能ですか?←ダメ元ですが…。 http://okwave.jp/qa3960723.html http://okwave.jp/qa1417302.html を参考にさせて頂いたのですが、解決はされていないようなので。

  • Ri-an
  • お礼率53% (8/15)
  • CGI
  • 回答数5
  • ありがとう数3

みんなの回答

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.5

>indexからAのページをクリック→戻る→indexページに隠しリンクが表示される。 このバージョンも作ってみました。 まず、トップページ表示用の”top.html”ファイルを作ってください。 隠しリンクは、<!--hidden ~ --> で囲みます。 以下、その例です。 【top.html】 <html> <body> <p><a href="top.cgi?guid=on&mode=regist">最初に見るべきページ</a></p> <!--hidden <p><a href="http://www.yahoo.co.jp">次に見ることができるページ</a></p> --> </body> </html> それから、以下の”top.cgi”というファイルを作ってください。 冒頭の設定部分はご自分の環境に合わせて書き変えてください。 そして、トップページに表示させるファイルですが、”top.html”でなく "top.cgi?guid=on"ですので注意してください。”top.html”は訪問者からは アクセスできないファイルです。 要するに、訪問者がアクセスするURLは以下のような感じとなります。 http://www.ri-an.jp/top.cgi?guid=on 【top.cgi】 #-- 以下を自分のページに合うように設定してください ---------------- my $top_page = 'top.html'; # トップページに表示させるファイル my $must_see_page = 'http://www.google.com'; # 最初に見るべきページ my $valid_duration = 30; # 見るべきページを見た後の有効期間(分単位) #------------------------------------------------------------------ use Fcntl qw(:DEFAULT :flock); use CGI; my %carrier_info = ( docomo => { re_ua => qr/DoCoMo/i, env_uid => 'HTTP_X_DCMGUID' }, au => { re_ua => qr/UP. ?Browser/i, env_uid => 'HTTP_X_UP_SUBNO' }, Softbank => { re_ua => qr/J-PHONE|Vodafone|SoftBank/i, env_uid => 'HTTP_X_JPHONE_UID' }, WILLCOM => { re_ua => qr/WILLCOM/i, env_uid => 'REMOTE_ADDR' }, EMOBILE => { re_ua => qr/emobile/i, env_uid => 'HTTP_X_EM_UID' }, ); my %user; while ( my ($carrier, $info) = each %carrier_info ) { if ( $ENV{HTTP_USER_AGENT} =~ $info->{re_ua} ) { $user{carrier} = $carrier; $user{uid} = $ENV{ $info->{env_uid} }; last; } } $user{carrier} = 'other' unless $user{carrier}; $user{uid} = $ENV{REMOTE_ADDR} unless $user{uid}; sysopen my $in, "$user{carrier}.cgi", O_RDONLY | O_CREAT or die $!; flock $in, LOCK_SH; my @registered_uids = <$in>; close $in; my $mode = CGI->new->param('mode') || q{}; if ( $mode eq 'regist' ) { regist(\%user, \@registered_uids); } else { show_top_page(\%user, \@registered_uids); } sub regist { my ($user, $registered_uids) = @_; my $uid_is_registered; for my $registered_uid (@$registered_uids) { my ($uid) = split /\s|\n/, $registered_uid; if ( $uid eq $user->{uid} ) { $registered_uid = "$user->{uid} $^T\n"; $uid_is_registered = 1; last; } } if ( not $uid_is_registered ) { push @$registered_uids, "$user->{uid} $^T\n"; } open my $out, '>', "$user->{carrier}.cgi" or die $!; flock $out, LOCK_EX; print {$out} @$registered_uids; close $out; print "Location: $must_see_page\n\n"; } sub show_top_page { my ($user, $registered_uids) = @_; my (@updated_uids, $uid_is_found); for my $registered_uid (@$registered_uids) { my ($uid, $time) = split /\s|\n/, $registered_uid; next if $^T - $time > $valid_duration*60; push @updated_uids, $registered_uid; $uid_is_found = 1 if $uid eq $user->{uid}; } open my $out, '>', "$user->{carrier}.cgi" or die $!; flock $out, LOCK_EX; print {$out} @updated_uids; close $out; open my $html, '<', $top_page or die $!; my $top_page_html = do { local $/; <$html> }; close $html; if ($uid_is_found) { $top_page_html =~ s/<!--hidden(.*?)-->/$1/sg; } else { $top_page_html =~ s/<!--hidden(.*?)-->//sg; } print "Content-Type: text/html\n\n"; print $top_page_html; }

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.4

前回の補足について回答し忘れてた部分がありました。 <p><a href="manage.cgi?guid=on&mode=regist" "URL">ページ表示名</a></p> <p><a href="manage.cgi?guid=on" "URL">ページ表示名</a></p> >このような感じであっていますでしょうか? ここにはURLを記述しないでください。 URLは”manage.cgi”の中の以下のところに記述してください。 my $must_see_page = 'http://www.google.com'; # 最初に見るべきページ my $second_page = 'http://www.yahoo.co.jp'; # 次に見ることができるページ そして、”top.html”では以下のように記述してください。 <p><a href="manage.cgi?guid=on&mode=regist">ページ表示名</a></p> <p><a href="manage.cgi?guid=on">ページ表示名</a></p> >自身のサーバーではなく外部のページです。 その場合は、sub renderという関数を以下のように変更してください。 sub render { my $file = shift; print "Content-Type: text/html\n\n"; open my $html, '<', $file or die $!; print <$html>; close $html; }     ↓    ↓    ↓ sub render { my $file = shift; if ( $file =~ /^http/ ) { print "Location: $file\n\n"; } else { print "Content-Type: text/html\n\n"; open my $html, '<', $file or die $!; print <$html>; close $html; } } >indexからAのページをクリック→戻る→indexページに隠しリンクが表示される。 >などの方法も考えたのですが、どちらの方が簡易的でしょうか? 難易度はどちらも同じぐらいだと思います。

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.3

補足質問にお答えします。 >←直接URLを入力すれば良いのでしょうか? URLでなくご自分のサーバー内にあるファイル名を入力してください。 ご自分のサーバーではなく、外部のページに飛ばしたいのなら、また別途作り直す 必要があります。 ←直接数字(30など)を入力すればよいのでしょうか? はい、そうです。

Ri-an
質問者

補足

ありがとうございます! 説明が不足していてすみませんでした。 自身のサーバーではなく外部のページです。 もしくは、 indexからAのページをクリック→戻る→indexページに隠しリンクが表示される。 などの方法も考えたのですが、どちらの方が簡易的でしょうか?

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.2

ウェブサイトをブラウジングできる携帯を持っていないので、下記のサイトを参考に 作ってみました。 個体識別情報の取得方法 http://pentan.info/mobile/get_uid.html 検証していなので(できないので)、うまく動作するかはわからないです。 まず、トップページですが、以下の要領で作ってください。 【top.html】 <html> <body> <p><a href="manage.cgi?guid=on&mode=regist">最初に見るべきページ</a></p> <p><a href="manage.cgi?guid=on">次に見ることができるページ</a></p> </body> </html> 次に、以下に書いてある”manage.cgi”というcgiファイルを作ってください。 冒頭に設定項目があるので、ご自分のサイトに合うように書き変えてください。 ”見るべきページを見た後の有効時間”($valid_duration)とは、この時間内 に”次に見ることができるページ”を見ないとタイムアウトする時間(分単位) のことです。 ”順番通り見なかったときのエラーページ”($error_page)とは、”見るべき ページ”を見ずに”次に見ることができるページ”を見ようとしたときのエラー ページです。例えば、以下のようなものを作ればいいと思います。 【error.html】 <html> <body> <p>このページを見るには、以下のページを最初に見てください。</p> <p><a href="manage.cgi?guid=on&mode=regist">最初に見るべきページ</a></p> </body> </html> 【manage.cgi】 #-- 以下を自分のページに合うように設定してください ---------------- my $must_see_page = 'must_see.html'; # 最初に見るべきページ my $second_page = 'second.html'; # 次に見ることができるページ my $error_page = 'error.html'; # 順番通り見なかったときのエラーページ my $valid_duration = 30; # 見るべきページを見た後の有効時間(分単位) #------------------------------------------------------------------ use Fcntl qw(:DEFAULT :flock); use CGI; my %carrier_info = ( docomo => { re_ua => qr/DoCoMo/i, env_uid => 'HTTP_X_DCMGUID' }, au => { re_ua => qr/UP. ?Browser/i, env_uid => 'HTTP_X_UP_SUBNO' }, Softbank => { re_ua => qr/J-PHONE|Vodafone|SoftBank/i, env_uid => 'HTTP_X_JPHONE_UID' }, WILLCOM => { re_ua => qr/WILLCOM/i, env_uid => 'REMOTE_ADDR' }, EMOBILE => { re_ua => qr/emobile/i, env_uid => 'HTTP_X_EM_UID' }, ); my %user; while ( my ($carrier, $info) = each %carrier_info ) { if ( $ENV{HTTP_USER_AGENT} =~ $info->{re_ua} ) { $user{carrier} = $carrier; $user{uid} = $ENV{ $info->{env_uid} }; last; } } $user{carrier} = 'other' unless $user{carrier}; $user{uid} = $ENV{REMOTE_ADDR} unless $user{uid}; sysopen my $in, "$user{carrier}.cgi", O_RDONLY | O_CREAT or die $!; flock $in, LOCK_SH; my @registered_uids = <$in>; close $in; my $mode = CGI->new->param('mode') || q{}; if ( $mode eq 'regist' ) { regist(\%user, \@registered_uids); } else { check(\%user, \@registered_uids); } sub render { my $file = shift; print "Content-Type: text/html\n\n"; open my $html, '<', $file or die $!; print <$html>; close $html; } sub regist { my ($user, $registered_uids) = @_; my $uid_is_registered; for my $registered_uid (@$registered_uids) { my ($uid) = split /\s|\n/, $registered_uid; if ( $uid eq $user->{uid} ) { $registered_uid = "$user->{uid} $^T\n"; $uid_is_registered = 1; last; } } if ( not $uid_is_registered ) { push @$registered_uids, "$user->{uid} $^T\n"; } open my $out, '>', "$user->{carrier}.cgi" or die $!; flock $out, LOCK_EX; print {$out} @$registered_uids; close $out; render $must_see_page; } sub check { my ($user, $registered_uids) = @_; my (@updated_uids, $uid_is_found); for my $registered_uid (@$registered_uids) { my ($uid, $time) = split /\s|\n/, $registered_uid; next if $^T - $time > $valid_duration*60; push @updated_uids, $registered_uid; $uid_is_found = 1 if $uid eq $user->{uid}; } open my $out, '>', "$user->{carrier}.cgi" or die $!; flock $out, LOCK_EX; print {$out} @updated_uids; close $out; if ($uid_is_found) { render $second_page; } else { render $error_page; } }

参考URL:
http://pentan.info/mobile/get_uid.html
Ri-an
質問者

補足

詳しく有難うございます! 【top.html】 <html> <body> <p><a href="manage.cgi?guid=on&mode=regist" "URL">ページ表示名</a></p> <p><a href="manage.cgi?guid=on" "URL">ページ表示名</a></p> </body> </html> このような感じであっていますでしょうか? #-- 以下を自分のページに合うように設定してください ---------------- my $must_see_page = 'must_see.html'; # 最初に見るべきページ ← my $second_page = 'second.html'; # 次に見ることができるページ ← my $error_page = 'error.html'; # 順番通り見なかったときのエラーページ ←直接URLを入力すれば良いのでしょうか? my $valid_duration = 30; # 見るべきページを見た後の有効時間(分単位)←直接数字(30など)を入力すればよいのでしょうか?

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.1

質問の意図がよくわからないので文面をそのまま素直に受け取ると 「Aのリンク先」と呼ばれるものを消して単純に「Bのリンク先」にしてしまえば良いと思うのですが・・・。 もしかしたら、通常はAのリンク先に飛ぶけれども、キャリアを判別して特定の携帯のみBのリンク先に飛ばせるようにしたいというのでしょうか? 携帯が対象だとクライアントサイドスクリプト(JavaScriptなど)は使えないことを前提としなければいけないので、CGIはいやだとなるとPHPで作るくらいしか道は無いでしょう。

関連するQ&A

  • クリックしないとアクセスできないようにしたいのですが。

    僕は今携帯専用のWEBページを作成しているのですが、 WEBページ運営のために、クリックしないとアクセスできないようにしたいのですが、僕自身ではなかなかわかりません。 教えていただけませんか。 例:トップページにAとBのリンクがあります。   ユーザ様がAを見たくてクリックすると、   「リンクBをクリックしてください。」   と画面がかわったので、トップページに戻りBをクリックしてから、トップページに戻り再びAをクリックするとアクセス可能になる。 というようなWEBページを作成したのですが、よろしくお願いします。 補足-携帯で可能であれば、うれしいのですが。     多分携帯はJavaScriptは対応していないと思うのですが。

  • リンク先

    自分のHP内で A.<a href="">HP</a> B.<a href="/">HP</a> C.<a href=" HP(トップページへ)のアドレス ">HP</a> は全て同じトップページに向かいますが、リンク先をトップページに 向かわせたいのであれば、気にせず使ってもよいのでしょうか? 特にAが気になるのですが・・。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • リンククリック数に応じて出現するリンク

    よろしくお願いします。 題名からではちょっと分かりずらいので、もうちょっと詳しく説明したいと思います。 あるページ(html)にA,B,Cといったリンクがあったとします。 そこで、A,B,Cのリンククリック数の合計がある数以上になったら、あらたにDというリンクを出現させることがしたいんです。 ”出現”ということはちょっと無理っぽいので、あらかじめDというリンクを作っておき、そしてA~Cのリンククリック数の合計がある数に達したら、Dのリンクに入ることができるというような、CGIはありますでしょうか? リンクを沢山押して閲覧してくれると、見ることができる秘密部屋やみたいのを作りたいと思います。 私なりに、いろいろと探してみたのですが見つかりませんでした。 リンクカウンターのCGIとキリ番CGIを組み合わせればできるかなー、と思っているのですが、私には知識がないのでどこをさわっていいのかわかりません。 リンクカウンターCGIでリンクのクリック数をカウントして、あらかじめ設定しておいたクリック数以上になると、キリ番CGIの機能で特別のページへ行けるように(または表示)、すればいいのじゃないかな、って素人の考えですがどうでしょうか? JavaScriptはスクリプトを見られてしまえば、すぐにパスワードが分かってしまうので、 分かる人がみれば簡単に次ぎのページに行けてしまいます。 だからCGIを使ってできればいいなと思ったのですが。 どなたか御存知の方はよろしくお願い致します。

    • 締切済み
    • CGI
  • クリック数によってリンク可能になるCGI

    よろしくお願いします。 題名からではちょっと分かりずらいので、もうちょっと詳しく説明したいと思います。 あるページ(html)にA,B,Cといったリンクがあったとします。 そこで、A,B,Cのリンククリック数の合計がある数以上になったら、あらたにDというリンクを出現させることがしたいんです。 ”出現”ということはちょっと無理っぽいので、あらかじめDというリンクを作っておき、そしてA~Cのリンククリック数の合計がある数に達したら、Dのリンクに入ることができるというような、CGIはありますでしょうか? リンクを沢山押して閲覧してくれると、見ることができる秘密部屋やみたいのを作りたいと思います。 私なりに、いろいろと探してみたのですが見つかりませんでした。 リンクカウンターのCGIとキリ番CGIを組み合わせればできるかなー、と思っているのですが、私には知識がないのでどこをさわっていいのかわかりません。 リンクカウンターCGIでリンクのクリック数をカウントして、あらかじめ設定しておいたクリック数以上になると、キリ番CGIの機能で特別のページへ行けるように(または表示)、すればいいのじゃないかな、って素人の考えですがどうでしょうか? JavaScriptはスクリプトを見られてしまえば、すぐにパスワードが分かってしまうので、 分かる人がみれば簡単に次ぎのページに行けてしまいます。 だからCGIを使ってできればいいなと思ったのですが。 どなたか御存知の方はよろしくお願い致します。

  • リンクが機能しない

    ローカルにあるhtmlファイルをブラウザからアクセスして、URLが file://で始まるページだと、下記のリンクでページ内にジャンプしません。 <A href="#etc"></A> <A name="etc"></A> エンジンをtridentからblinkに変更するとジャンプします。 しかし、下記の件でblinkではなくtridentのままにしたいです。 http://okwave.jp/qa/q8269492.html tridentでリンクを機能させる事は可能でしょうか? 試しに下記のサイトをローカルに保存して開くとページ内ジャンプして リンクは機能していました。 http://rdfaq.fc2web.com/ file://から始まるローカルファイルでリンクが機能するしないの違いは何でしょうか?

  • リンク先を変えたいのですが

    scrolltopcontrol.jsのjQueryを使って トップの位置に戻るページを作りましたが クリックした時のリンク先を変えたいのですが どこをどのように書き換えればよいのでしょうか http://から始まる任意のページにリンクするようにしたいのです (ページ内ではなく) どなたかお教えいただけますでしょうか 何卒宜しくお願い致します -------------------- 以下のサイトを参考にして作業をしています 【ページのトップに戻る】 http://iuser.jp/webjin/archives/2009/11/jquery-scroll-to-top-control.html 宜しくお願い致します

  • 写真クリックするとリンク先HPに・・!!

    アメブロ(ameba)を使用しています。 よく他の方のブログを見ていると、画像をクリックすると、楽天HPにリンクされている記事をよく見ます。 この方法を教えてください。 検索したら、たぶん同様の質問かと思うものをみつけました。 http://oshiete1.goo.ne.jp/qa1893009.html ここに書いてある通りしているのですが、うまくいきません・・。 初心者なので、細かく教えていただけると助かります。 アメブロの記事を作成するページで「HTMLタグを表示」をクリックし、 そこに以下↓をコピペすればいいのですよね? <a href=リンク先URL target=blank><img src=画像ファイル名></a> 「リンク先URL」という文字を消して、HPのアドレスを入れる。 画像ファイル名というのは何でしょう?? 画像をまず、画像フォルダに保存するのでしょうか?その後、どうするのでしょうか? おしえてください!!

  • 複数のリンクのクリック回数をカウントしたい

    自分のサイト内の色々な場所にある複数のリンクのクリック回数をカウントしたいです。 できればそれぞれにIDをつけて、1つのページでカウント結果をまとめて見れるのが理想です。 リンク先は自分のサイトではないため、リンク先ページへのアクセス数をカウントするのではなく、 あくまでもリンクのクリック回数を数えたいのですが、フリーのCGIなどありますでしょうか? なお私のスキルだと、CGIを設置することは出来ますが、自分で書いたり改造したりは無理です。 よろしくお願いしますm(_ _)m

    • 締切済み
    • CGI
  • 携帯でのアクセスをリンク先に飛ばしたい

     HPをつくっていますが携帯で私のトップページへリンクしたときに画像を入れているため表示がおそくなります。そのため携帯でアクセスしたときに 画像を張ってない別のページへ自動で飛ぶようにしたいのですがhtmlタグやjava scriptを使ってできないでしょうか? よよしくおねがいします。

    • ベストアンサー
    • HTML
  • アクセス認証機能を持ったHPスペース

    A→B→C→DをクリックしないとEにアクセスできない というような機能がついているHPスペースなどありませんでしょうか? http://tool-1.net/k.cgi 以外にありましたら教えてください。

専門家に質問してみよう