質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.33%

phpでheaderのget行を取得したい。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,197

redsan

score 12

centos6.7webserverで簡単なhpを作っています。

mydomain/test/test*.htmlからmydomain/test.phpに
302redirectしたのですがtest.phpにてrefererを取得しても
できませんでした。

server内部からfirefoxアドオンにてtest.phpでheaderを確認すると


http://domain.com/test.html //リダイレクト元url(取得したいurl)

GET /test.html HTTP/1.1
Host: domain.com
User-Agent: Firefox
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive

HTTP/1.1 302 Found
Date:
Server: Apache
Location: http://domain.com/new.php //リダイレクト先url
Content-Length: 211
Connection: close

Content-Type: text/html; charset=iso-8859-1

こうなっています。

そして

$headers = getallheaders();

var_dump($headers);

これでhostはとれましたが
リダイレクト元url(取得したいurl)がとれませんでした。

forefoxでget行は確認できますが
getallheadersでは確認できないので
困っています。

phpでこのget行を取得して
リダイレクト元url(取得したいurl)を変数に入れてから
その内容の一部を書き換えて表示したいです。
よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

refererはプライバシーやらセキュリティーやらの理由でクライアント側からフィルターされやすい項目なのであまり参考にするべき情報じゃないです。test*.htmlのリダイレクトでそれぞれのリダイレクト先のURLにGETをつけておくとかどうでしょうか?
/test/testhoge.html → http://yourdomain/test.php?q=hoge
/test/testpiyo.html → http://yourdomain/test.php?q=piyo
で $_GET[’q’]で回収
とかですかね?

また、リダイレクトをmeta要素でやるならjavascript + cookieとかでもできそうです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/24 04:21

    教えていただいたことをやってみようと調べていたのですが
    すみません、よくわからなかったです。

    たぶんGET['q']は
    /test/testhoge.html → http://yourdomain/test.php?q=hoge
    /test/testpiyo.html → http://yourdomain/test.php?q=piyo
    リダイレクト元がhogeなのかpiyoなのかで
    リダイレクト先を分ける方法だと思いますが
    リダイレクト先にhttp://yourdomain/test.php?q=hoge
    と書いてもリダイレクト元は取れないみたいです。

    やっていて要点が見えてきたので書いてみます。

    A.htmlをB.phpに転送 (302) 
    B.phpでA.htmlというurlを取得
    それを変数に格納。
    それにhost要素をつければ元urlに。

    ちょっと難しく考えすぎていました。
    ここまでなんですがなにかいい方があれば教えてください。

    注文が多くすみません。

    リファラーを使わない。
    htmlの編集もしない。
    httpd.confの追記は可能。


    キャンセル

  • 2016/05/24 06:15

    リダイレクト先をhttp://yourdomain/test.php?q=hoge
    としてtest.phpで$_GET['q']を取得してみてください。

    キャンセル

+1

リダイレクト元の、mydomain/test/test*.html をスクリプトにして、そこでリダイレクト時に取得するしか無いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/24 00:37

    各リダイレクト元ファイルをphpに変えてそこで現在のurlを取得し
    referer送信してそれをリダイレクト先で取得しないとできないということでしょうか。

    もうひとつ教えて欲しいのですがこのケースではなぜrefererがないのでしょうか。
    リダイレクト元htmlにrefererタグがないからなのでしょうか。

    キャンセル

  • 2016/05/24 01:10 編集

    各リダイレクト元ファイルをphpに変えてそこで現在のurlを取得しDBに保存するという意味です。リダイレクト先での取得は不可能です。

    > このケースではなぜrefererがないのでしょうか。
    refererはブラウザが付けます。別のウェブページのリンクから来た以外ではrefererは付きません。

    キャンセル

  • 2016/05/25 09:09

    そうなんですね、勉強になりました。
    ありがとうございました。

    キャンセル

0

meta refreshでリダイレクトさせた際にリファラが送られるかどうかはブラウザに依存します。
今回はどのような方法でリダイレクトされているのでしょうか?

JavaScriptでのリダイレクトであれば、リファラは残るのではないでしょうか。
古いIEは残らなかった様子ですが・・・
ちょっと違うSEO観点の記事ですが参考になさってください。
https://sem-technology.info/ja/google-analytics/javascript-redirect-best-practice

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/25 09:07

    回答ありがとうございます。
    httpd.confのmod_rewrite302です。
    サーバー内部からブックマークで飛んで確認していたので
    うまくいかなかったようです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る