私はfile_get_contentsをそのまま使用しています
file_get_contents( $url1 ).
ただし、実際のURLの内容は$url2からのものです。
具体的なケースは次のとおりです。
$url1 = gmail.com
$url2 = mail.google.com
PHPまたはJavaScriptでプログラム的に$url2を取得する方法が必要です。
私はfile_get_contentsをそのまま使用しています
file_get_contents( $url1 ).
ただし、実際のURLの内容は$url2からのものです。
具体的なケースは次のとおりです。
$url1 = gmail.com
$url2 = mail.google.com
PHPまたはJavaScriptでプログラム的に$url2を取得する方法が必要です。
現在のURLを取得する場合は、JSでwindow.location.hostnameを使用できます。
これは、次のコンテキストを作成することで実行できると思います。
$context = stream_context_create(array('http' =>
array(
'follow_location' => false
)));
$stream = fopen($url, 'r', false, $context);
$meta = stream_get_meta_data($stream);
$ metaには、(とりわけ)リダイレクトURLを保持するために使用されるステータスコードとLocationヘッダーを含める必要があります。$ metaが200を示す場合、次の方法でデータをフェッチできます。
$meta = stream_get_contents($stream)
欠点は、301/302を取得したときに、LocationヘッダーのURLを使用してリクエストを再設定する必要があることです。泡立てて、すすぎ、繰り返します。
PHPまたはJavaScriptのどちらかが必要な理由がわかりません。つまり...問題への取り組み方が少し違うのです。
サーバーサイドのPHPソリューションが必要な場合は、ここに包括的なソリューションがあります。逐語的にコピーするにはコードが多すぎますが:
function follow_redirect($url){
$redirect_url = null;
//they've also coded up an fsockopen alternative if you don't have curl installed
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
//extract the new url from the header
$pos = strpos($response, "Location: ");
if($pos === false){
return false;//no new url means it's the "final" redirect
} else {
$pos += strlen($header);
$redirect_url = substr($response, $pos, strpos($response, "\r\n", $pos)-$pos);
return $redirect_url;
}
}
//output all the urls until the final redirect
//you could do whatever you want with these
while(($newurl = follow_redirect($url)) !== false){
echo $url, '<br/>';
$url = $newurl;
}