• ベストアンサー

リダイレクト元のURLの取得方法について

現在、以下2つのphp5プログラム(+ PEAR::AUTH)で、なんちゃってフォーム認証するCGIを作成しています。 環境 Windows XP、Web SV IIS 5.1 (1) aaa.php  : PEAR:AUTHを使った、ログイン画面(フォーム認証CGI)。  : 機能 : MySQLに格納されたID/PWで認証する。認証OKだったら、bbb.phpが出力するDBレコードデータ参照ページへのリンク集を出力する。    リンク1)http://domain.jp/bbb.php?id=1001    リンク2)http://domain.jp/bbb.php?id=1002    リンクn)http://domain.jp/bbb.php?id=nnnn    ・・・といった感じで、DBに登録されたレコードを表示するCGIへのリンクをずらずら出します。 (2) bbb.php  : DBデータを整形し、多少見やすい形に加工したHTMLページを出力する。    この時、aaa.phpが認証OKの証?として出力したCookieが、    1.あったらHTMLページ出力し、     例1)http://domain.jp/bbb.php?id=1001 = 一意のキーid=1001の値で出力出来る、MySQL上のデータをHTML化したもの     例2)http://domain.jp/bbb.php?id=1002 = 一意のキーid=1002の値で出力出来る、MySQL上のデータをHTML化したもの     例n)http://domain.jp/bbb.php?id=nnnn = 一意のキーid=nnnnの値で出力出来る、MySQL上のデータをHTML化したもの    2.無かったら、     (a) http header 401を出力     (b) aaa.php(フォームログイン画面)にリダイレクトする。  一応、ここ迄はいいのですが、例えば、利用者が、上記例2のURLをブラウザ「お気に入り」で保存しておき、直接そのページをみたい、と言った時、リンク指定先のbbb.phpは、  ・ そのユーザがログインしていない場合(Cookieが無い場合)、aaa.phpのログインフォームへリダイレクトする  ・ aaa.phpは認証後、リンク集ページを出力する、  といった動作になってしまいます(てゆうかそうゆう作りなんで当たり前ですが・・・)。  そこで、aaa.phpの機能で、  ・ 「どのURLから、リンク(リダイレクト)されてきたかを判定するロジック」を入れ、もし、「bbb.php?id=xxxx」だったら、   ・ 認証OK後、直接、そのbbb.phpが出力するHTMLのURL(http://domain.jp/bbb.php?id=xxxx)に、再度リダイレクトする処理を入れれば良い?、   のかなーと短絡的に考えました。  で、問題となるのが、aaa.phpが表示された時、どこからリダイレクトされてきたか(リダイレクト元のURL)を知る方法です。  そこで、PHPの、$_SERVER[HTTP_REFERER]を入れてみた所、  ・ bbb.phpにリダイレクトされる前のURLが、$_SERVER[HTTP_REFERER]に入っている(多分、別のHTMLのbbb.php?id=~へのリンク集?)  ・ $_SERVER[HTTP_REFERER]の中が空(URL直接指定?)  という現象で詰まってしまいました。  ここから抜け出す為、何か良いアイディア(別の方法、関数等)があればお知恵拝借したいと考えています(書いてある事を理解して頂ける文章か今イチ不安ですが・・・)。  何卒よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

セッションの方が簡単そうだしそっちでいいのではと。

task2easy
質問者

補足

ですよね。自分も簡単な方がいいです。 有難うございました。

その他の回答 (2)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

リファラを見るよりセッションに保存しておくか、 header('Location: login.php?url=現在のURL'); で飛ばしてログインフォームでその値を見るとか。 後者の場合は、urlのエスケープ処理、永久ループ回避が必要です。

task2easy
質問者

お礼

 ログインフォームのCGIに、新たにgetパラメタをつける方法、というのも、見た目がわかり易そうでいいですね。やるとしたら、エスケープは面倒そうなので、base64かなんかで文字列化すれば、decode、encodeの関数もあったと思うので、URLの使いまわしは楽そうです。  ただ、seimurakamさんからも教えて頂いた様に、セッションに保存して、値を別のCGIで使いまわす、といった方法と、どちらがベターかつオーソドックスな方法なんでしょうか・・・?  ご回答ありがとうございました。

回答No.1

さらっと書いてしまうと、 >この時、aaa.phpが認証OKの証?として出力したCookieが、 こういった機構ではクッキーよりもセッションを使用した方が セキュリティ上も好ましいと思うのですが、 クッキーにこだわる理由はありますか?

task2easy
質問者

お礼

回答有難うございます。 > クッキーにこだわる理由はありますか?  全くありません。  認証を経ずbbb.php?id=xxxxにアクセスしてきたら、bbb.phpの方で、   $_SESSION['redirect_moto_URL'] = "http://domain.jp/bbb.php?id=nnnnx";  とかやってから、aaa.phpにリダイレクトし、aaa.phpは、   $_SESSION['redirect_moto_URL']  の値を取り出して、使い回す、という様な事でしょうか?(合ってますか?)  何か補足して頂ける事があれば、またよろしくお願いします。

関連するQ&A

  • リダイレクト方法

    http://domain.com/aaa.html http://domain.com/bbb/bbb.html http://domain.com/ccc/index.html 上記のURLのように存在しないファイルやディレクトリにアクセスしたら http://domain.com/ddd/index.html にリダイレクトしたいと考えております。 どのようにすれば、実現できますでしょうか? ご存知の方、宜しくお願いします。

  • .htaccessリダイレクト

    .htaccessリダイレクト 別ドメインにリダイレクトさせるための方法が分からないので、質問させてください。 現在http://www.aaaaa.jp/aaa/bld_list.phpにアクセスしたときに http://www.bbbbb.jp/bbbにリダイレクトさせようとしています。 googleで「別ドメイン .htaccess リダイレクト」など色々検索してみたのですが、 なかなか出て来なく、困っています。 どなたかアドバイスいただけないでしょうか?

  • パラメーター付きのURLをリダイレクトしたい

    お世話になります .htaccess でリダイレクトを行いたいのですが、パラメータ付きのURLの為かリダイレクトができません。 .htaccess内の記述↓ redirect 301 /aaa/bbb.php?N=1 http://www.aaa.com/index.html 「?=N1」の部分を取れば問題なくリダイレクトします パラメータ付きのURLはリダイレクト可能でしょうか? よろしくお願いいたします

  • 動的URLから静的URLへの301リダイレクト

    下記のように動的URLを静的なURLに置き換えています。 http://www.sample.com/dir/aaa/index.php?content_id=1 ↓ http://www.sample.com/aaa_index.content_id_1.htm この動的URLを、置き換えた静的URLへ301リダイレクトさせたいのですが、うまくいきません。 htaccessの記述を下記のようにしましたが、多分、動的URLの「?」があるためうまくいかないようです。 RewriteEngine on RewriteBase / RewriteRule ^dir/aaa/index\.php?content_id=(.*)$ /aaa_index.content_id_$1.htm [R=301,L] 「?」が含まれる動的URLから静的URLに301リダイレクトさせたい場合、どのように記述すれば良いでしょうか?

  • 301リダイレクトの記述方法に関して

    サイトリニューアル後の301リダイレクトに関してご質問させて頂きます。 旧サイト URL : http://www.hoge.co.jp/aaa サーバーのディレクトリ : www/aaa 新サイト(全ページssl対応) URL : https://www.hoge.co.jp/aaa/bbb サーバーのディレクトリ : ssl/aaa/bbb サーバー:ファーストサーバ ------------------------------------------------------------------------- 上記の状況で旧サイトのディレクトリwww/aaaより下のファイルにアクセスしてきたものを 全て新サイトのトップページ(https://www.hoge.co.jp/aaa/bbb/index.php)へ 「.htaccess」を使用してリダイレクトしたいのですが、どの様に記述すれば良いのか 分かりません。 調べて「.htaccess」を作成しサーバーへアップロードしてみてもインターネットエラー500に なってしまいます。 この様な場合の「.htaccess」の記述方法や設置場所をご教授頂きますようお願い申し上げます。

  • 301リダイレクトで一部URLがFC2エラーへ飛ぶ

    301リダイレクトで一部URLがFC2エラーへ飛ぶ問題についての解決お願いします。 ドメイン移転のため、301リダイレクトをしようとしています。 現在FC2の無料ホームページを使用しています。 aaa.web.fc2.comからbbb.web.fc2.comへ301リダイレクトしようとしています。 下記のように.htaccessを記述したのですが、 aaa.web.fc2.comからbbb.web.fc2.com、 aaa.web.fc2.com/index.htmlからbbb.web.fc2.com、 aaa.web.fc2.com/ddd.htmlからbbb.web.fc2.com/ddd.html へはリダイレクトが成功しているのですが、 aaa.web.fc2.com/bbb.htmlからbbb.web.fc2.com/ccc.htmlへは、 aaa.web.fc2.com/bbb.htmlを入力するとFC2のページがないというエラーページに飛びます。 この問題の解決をどうぞよろしくお願いします。 RewriteEngine on RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ http://aaa.web.fc2.com/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^aaa\.web\.fc2\.com RewriteRule (.*) http://bbb.web.fc2.com/$1 [R=301,L] Redirect 301 /bbb.html http://bbb.web.fc2.com/ccc.html Redirect 301 /ddd.html http://bbb.web.fc2.com/ddd.html

  • 相対URLによるリダイレクト

    Locationヘッダに転送先のURLを指定する際に、相対URLをフルパスで指定すると内部リダイレクトになりますが、絶対URLを指定せずにブラウザにリダイレクトさせる方法はないでしょうか。 具体的にはこうです。 URL http://www.xxx.com/dir/from.cgi という位置にスクリプトがあるとして、ドキュメントルートにある「to.html」にリダイレクトさせたい場合、 Location: http://www.xxx.com/to.html と出力するのではなく、 Location: /to.html と出力すると、内部リダイレクトによってブラウザに返されることなく、つまりブラウザの「アドレス」欄はhttp://www.xxx.com/dir/from.cgiのまま「to.html」の内容が表示されるわけですが、そうではなく前者のように動作させたいのです(ブラウザに返してリダイレクトさせたい)。 目的は、ドメインなど絶対URLが変更になっても汎用的にスクリプトを移行できるようにしたい(絶対URLを書かなくて良いようにしたい)のですが、内部リダイレクトでは表示されるHTMLの内容によって、たとえば<img src="./image.gif">など相対パス指定の参照が正しく表示されないためです。 どうぞよろしくお願いいたします。

    • 締切済み
    • CGI
  • URL書き換え

    mod_rewriteを使ってURL書き換えを行っています。 ttp://aaa.jp/aaa/xxx.html ↓ ttp://aaa.jp/bbb/xxx.html と書き換えようと考えています。 ttp://aaa.jp/bbb/xxx.html と直接指定されたときは大丈夫なのですが、 ttp://aaa.jp/aaa/xxx.html と指定されたときには、 ttp://aaa.jp/bbb/xxx.html に書き換えたいのですが、なかなかうまきいきません。 どうすればできるのでしょうか? (リンク表示にならないためにhttpのhをとってます)

  • 携帯版アナリティクスでのリダイレクトの回数計測

    はじめまして。 携帯版googleアナリティクスでリダイレクトページの計測ができなくて困っています。 背景としては 別ドメインへの遷移の回数をリダイレクトページを挟んでその回数を計測することで 計測しようと考えています。 私のイメージとしてこのような形で測定しようと考えました。 ---------------------------------------------------------------------------------------------------- A(私のサイトのあるページ)→リダイレクトページ→B(リダイレクト先ドメイン)                       ↑ここにトラッキングコードを貼りつける。 ---------------------------------------------------------------------------------------------------- リダイレクト方法はサーバー内.htaccessにて Redirect permanent /aaa.html http://aaa/bbb という形で設定しております。 またリダイレクトページのコードですが、htmlページにコードを貼り付けた簡単なものです。 以下コードです。 ---------------------------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <?php // Copyright 2009 Google Inc. All Rights Reserved. $GA_ACCOUNT = "MO-xxxx-xxxx"; $GA_PIXEL = "/ga.php"; function googleAnalyticsGetImageUrl() { global $GA_ACCOUNT, $GA_PIXEL; $url = ""; $url .= $GA_PIXEL . "?"; $url .= "utmac=" . $GA_ACCOUNT; $url .= "&utmn=" . rand(0, 0x7fffffff); $referer = $_SERVER["HTTP_REFERER"]; $query = $_SERVER["QUERY_STRING"]; $path = $_SERVER["REQUEST_URI"]; if (empty($referer)) { $referer = "-"; } $url .= "&utmr=" . urlencode($referer); if (!empty($path)) { $url .= "&utmp=" . urlencode($path); } $url .= "&guid=ON"; return str_replace("&", "&amp;", $url); } ?> <html> ---中略--- </body> <?php $googleAnalyticsImageUrl = googleAnalyticsGetImageUrl(); echo '<img src="' . $googleAnalyticsImageUrl . '" />';?> </html> ---------------------------------------------- ※html→phpの変換は.htaccessで別途記載しているのでビーコンは動いています。 これは確認済みです。 この条件だとリダイレクトはできているのですが、googleアナリティクスのコンテンツに リダイレクトページが反映されていませんでした。 おそらく、リダイレクトさせてしまうと、ビーコン反応前に遷移してしまうためトラックできないの だと思うのですが、これの解決に何かいい方法はございますでしょうか? 何分phpなどは今までいじってない初心者なものでして、過去のgoogleアナリティクス公式ヘルプの 投稿に http://www.google.com/support/forum/p/Google%20Analytics/thread?tid=450b0542180ca7d1&hl=ja http://www.google.com/support/forum/p/Google%20Analytics/thread?tid=6eb6776377b4fb05&hl=ja こういったものもあったのですが、読んでもよくわからなかったため、投稿させて頂きました。 解決に必要な条件などで提示しきれていないものが有りましたら お応えいたしますので、お力添えをお願いします。

    • 締切済み
    • PHP
  • htaccessで指定したURLが含まれる場合

    htaccessの設定でリダイレクト処理をしたいと思っています。 したい内容は 「指定したURLが含まれる場合、リダイレクト」 です。 現在、phpで下記の通り引数を使用してサイトを表示しています。 http://www.sample.jp/test.php?id=1&page=1 http://www.sample.jp/test.php?id=1&page=2 http://www.sample.jp/test.php?id=1&page=3 http://www.sample.jp/test.php?id=2&page=1 http://www.sample.jp/test.php?id=2&page=2 http://www.sample.jp/test.php?id=2&page=3 上記、URLで 引数id=1のページにアクセスがあった場合、新ドメインの http://www.ex.jp/test_page/ へリダイレクトし、 引数id=2のページにアクセスがあった場合、新ドメインの http://www.ex.jp/sample_page/ にリダイレクトしたいと思っています。 現状は1つずつ RedirectPermanent /test.php?id=1&page=1 http://www.ex.jp/test_page/ RedirectPermanent /test.php?id=1&page=2 http://www.ex.jp/test_page/ RedirectPermanent /test.php?id=1&page=3 http://www.ex.jp/test_page/ としていますが、これをid=1のページを全て一括で http://www.ex.jp/test_page/ へリダイレクトする書き方はないのでしょうか。

専門家に質問してみよう