PHP・JavaScriptでリダイレクト先のURLの調べるには…

例えば bit.ly みたいなのを使うと、こんな短縮URLができます。

こういう短縮URLのリダイレクト先(つまり元のページ)を知りたい・・・けどどういう調べ方があるのか分からなくてお手上げ状態

みたいに困ってたんですが、ついに調べ方が分かりました。

そこで同じように悩む人を減らすために、
ここでは PHP ・JavaScript でのリダイレクト先の調べ方 をまとめてみます。

1.PHPでリダイレクト先を調べる方法

PHPの場合、調べるのはそんな難しくないです。

一番手軽のは curl のヘッダー情報をみること

たとえば次に紹介するやり方で意外と簡単に取得できます。

 

例えば次はこのブログのトップの短縮URL

この展開先を調べる関数例は次の通りです。

▼こんな関数を作ってみた

そのまんま expand_url  っていう捻りのない関数名

この関数で大事なポイントは次の3つです。

  • Curlのヘッダー情報から調べてる
    まず普通に Curl を実行し、そのヘッダーに Location:  が含まれてれば再帰的に関数を呼び出す。最後にリダイレクトが発生してないのが元のURL(である確率が高い)
  • 最大の再帰回数を決めておく
    このコードだと MAX_URL_REDIRS  を20回に制限している。そうしないと無限に再帰関数が呼ばれることもあるので要注意
  • ヘッダー部分だけを受け取る
    Curlを実行する時にオプションに CURLOPT_NOBODY  を指定している。こうすればムダなデータを受け取らないので高速化可能

再帰を使わない方法もあるかもしれないけど、面倒なので再帰してます。

 

リダイレクト先を調べるときは、こういうコードを書くだけです。

▼例えば bitly の元URLを調べるコード例

▼ このコードの出力結果

まあ短縮URLの元URLが分かって何になるのかって話だけど・・・

でもURLをフォームから受け取ったりするとき、短縮URLに変なドメインが混じってないか簡易的にチェックするときなどは役立つかもしれません。

あと純粋にURLのリダイレクト先を知りたいときも便利ですね。

2.JavaScriptでリダイレクト先を調べるには...

次はJavaScriptでリダイレクト先を調べる方法について

これははっきりと言います。

そんな方法ありません(たぶん)

実際いろいろ探し回ったけど、どうやら技術的に無理があるみたいです。

 

ただし!

さっき紹介したPHPでリダイレクト先を調べるスクリプト

アレを使えば、Ajax経由などでURLのリダイレクト先は分かります

例えばPHP側でこういうスクリプトを用意しときます。

▼ PHP側のスクリプト例(レスポンス返す)

さっきのスクリプトを少し改造しただけ

▼ このPHPをAjax側から呼ぶ(レスポンス受け取り)

ちなみに想像で書いたので、もしかしたら少し間違いがあるかも

でもこれでJavaScript側からリダイレクト先が取得できます。

ただAjax単体では無理ので、こういう一工夫が必要なのが難しいところですね。

ここまでのまとめ

短縮URLとかの元URLを調べたいなら、PHPからCurlを呼び出すのが一番確実

もちろんCurlが使えるなら、他言語でもおんなじことはできると思います。

以上、PHP・JavaScriptでリダイレクト先を調べるやり方でした。