こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

外部サイトへアクセスする際によく多くのサイトで見受けられる「ここから先

外部サイトへアクセスする際によく多くのサイトで見受けられる「ここから先は外部サイトです」というようなワンクッションを置こうと思っており、ジャンプ先のURLは末尾に引数としてGETで渡そうと思っています。

そこでidという値を使って
http://aaa.com/?id=http://bbb.com/

としてデータを渡した際に、URLのジャンプ先を
$url = $_GET[id];
if (preg_match('/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/', $url)) {}

として正規表現のチェックをした後、ジャンプさせようとしたのですが「http://bbb.com/」といったアドレスは問題ないのですがジャンプ先のURLに引数が含まれている場合(例:http://bbb.com/?year=2010&month=04&day=29など)ジャンプが正しくできません。

他のサイトを見ると、
http://aaa.com/http://bbb.com/?year=2010&month=04&day=29

とGETを使わずURLを受け渡ししてるように思えるのですが参考になるサイトなど御座いましらご教授頂けたら幸いです。

よろしくお願いいたしますm(_ _)m

投稿日時 - 2010-04-30 13:28:59

QNo.5861743

暇なときに回答ください

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

クッションページURL?転送先URL
で飛ぶクッションページの方が作るのに楽です。

$_SERVER["QUERY_STRING"]が転送先のURLになります。

参考
http://xn--u8jxb9ib9150b2px.jp/php/cushion.html
こんな感じ。


>ジャンプ先のURLに引数が含まれている場合(例:http://bbb.com/?year=2010&month=04&day=29など)ジャンプが正しくできません。

http://xn--u8jxb9ib9150b2px.jp/php/php/cushion.php?http://bbb.com/?year=2010&month=04&day=29

問題なく転送されます。

投稿日時 - 2010-05-04 10:15:31

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

PATH_INFOです。
URLでPHPファイルの直後に/を付けた場合、その/以降の部分が
PHPスクリプトからは $_SERVER[PATH_INFO] で参照できます。

ただし、

> http://aaa.com/http://bbb.com/?year=2010&month=04&day=29

この形式で「引数はPATH_INFOにしてPHPを起動する」ように指示するのは一手間かかるので、出来ることなら
http://aaa.com/redirect.php/http://bbb.com/
と、URLにPHPまで指定するようにしたほうが良いでしょう。

どうしても、PHPファイルを指定しない、http://aaa.com/http://bbb.com/?year=2010&month=04&day=29 という形式を使いたいのでしたら、
Apacheなら mod_rewriteを使うなど、PHPを起動するためのURL書き換えが必要です。

(http://aaa.com/?id=http://bbb.com/ の場合は、引数を取り除いた部分は http://aaa.com/ なので、DirectoryIndex でPHPを起動させることが一目瞭然ですが、

http://aaa.com/http://bbb.com/
のスタイルでは、
http://aaa.com/aaa/bbb.html
みたいな通常のURLアクセスと、WWWサーバ側では区別がつかないため、
そういった条件判定を .htaccess に組み込む必要が出てきます。

投稿日時 - 2010-04-30 15:20:30

ANo.1

GET渡しする前に、urlencode関数を使ってURLエンコードすべきです。
例:
http://aaa.com/http://bbb.com/?year=2010&month=04&day=29

http%3A%2F%2Faaa.com%2Fhttp%3A%2F%2Fbbb.com%2F%3Fyear%3D2010%26month%3D04%26day%3D29

取得したURLエンコード文字列は、urldecode関数でデコードします。

投稿日時 - 2010-04-30 13:39:09

あなたにオススメの質問