サイトへのアクセス方法とURL引数の問題

このQ&Aのポイント
  • 外部サイトへのアクセス時にワンクッションを置く方法と、URL引数の問題について説明します。
  • 外部サイトへアクセスする際に多くのサイトで見かける「ここから先は外部サイトです」というワンクッションの設定方法を説明します。
  • URL引数が含まれる場合のジャンプ先URLの正確な設定方法について、他のサイトを参考に説明します。
回答を見る
  • ベストアンサー

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

外部サイトへアクセスする際によく多くのサイトで見受けられる「ここから先は外部サイトです」というようなワンクッションを置こうと思っており、ジャンプ先の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

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

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

  • ベストアンサー
noname#112057
noname#112057
回答No.3

クッションページ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 問題なく転送されます。

その他の回答 (2)

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.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 に組み込む必要が出てきます。

  • Hohenheim
  • ベストアンサー率18% (43/237)
回答No.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関数でデコードします。

関連するQ&A

  • 条件付の重複レコードの削除 (sqlite3)

    重複レコードの削除で、重複レコード内の日付が最も新しいのだけを残したいのですが sqlite3のクエリをどう書けるのでしょうか? 例えば以下のような構造で、keyの重複を削除するのですが、 keyごとにyear, monthのもっとも新しいのだけ残したのです。 よろしくお願いします。 id, key, year, month, value 1 , aaa, 2000,12, 1000 2 , bbb, 2001, 1, 600 3 , bbb, 2001, 4, 500 4 , bbb, 2000, 2, 400 5, ccc, 2001, 3, 300 6, ccc, 2001, 8, 200 クエリ実行の結果こうしたい↓ 1 , aaa, 2000,12, 1000 3 , bbb, 2001, 4, 500 6 , ccc, 2001, 8, 200

    • ベストアンサー
    • MySQL
  • 動的URLを静的URLへリダイレクト

    サーバの移転にともない、古いURLから新しいURLへリダイレクトさせる作業を行っています。 旧:http://aaa.bbb.com/default.asp?year=yyyy&month=mm ↓ 新:http://mmm.nn.co.jp/yyyymm しかし上記のようにパラメータを持っているURLはうまくリダイレクトされません。 今回の場合、動的ページを静的ページに見せるのではなく、URL欄も表示も静的ページに遷移させます。 この作業にはISAPI_Rewriteを使っていますが、ISAPI_Rewriteで検索してもmod_rewriteで検索しても、静的URLから動的URLへのリダイレクト(URLは静的で表示が動的ページの内容)しかでてきません。 そもそも正規表現に「?」を入れるとリダイレクトできないのか(?がエスケープされていない気がします)、書き方が間違っているのなら正しい書き方を教えていただけると助かります。 [現在使っている記述] RewriteRule ^aaa/bbb.asp\?year=(.*)&month=(.*)$ http://one.case.com/ddd/$1$2 [R,L] よろしくお願いいたします。

  • 携帯サイトアドレスの最後に「/」は必要?

    携帯サイトのアドレスの最後に「/」は必ず必要でしょうか? たとえば、以下の4つのURLがあった場合、 1.http://aaa.bbb.com 2.http://aaa.bbb.com/ 3.http://aaa.bbb.com/i 4.http://aaa.bbb.com/i/ 1と3の場合だと携帯からアクセスできないということはあるのでしょうか? ドコモやauは、2や4の形式を公式サポートする、などということはあるのでしょうか? 携帯サイトを構築しているのですが、最後の「/」がない場合は正常にアクセスできない、と認識しているお客さんが結構います。 PCでは最後の「/」はあってもなくても正しくアクセスできると認識しているのですが、携帯サイトの場合だとそうではないのでしょうか? ご存知の方、教えてください。 よろしくお願いします。

    • ベストアンサー
    • CSS
  • mod_rewriteで

    mod_rewriteで /dir/aaa/bbb/form.html  を  /dir/form.php?id1=aaa&id2=bbb にする書き方を教えてください いまのところ RewriteRule ^/dir/([0-9A-Za-z]+)/([0-9A-Za-z]+)/form.html /dir/form.php?id1=$1&id2=$2 [L] としていますが上手く出来ていないようです

  • プロキシでエラーになり外部と通信できない

    お世話になります。 外部にあるサーバーとLAN内にあるPCとで通信しようとして失敗し、原因を辿って行ったところ、squidプロキシのログ上でエラーを見つけました。ステータスは400:Bad Request、接続先(ホスト名)が空欄状態です。 試しに、外部サーバーの名前解決の情報をPCのhostsに追記したところ、通信ができました。 ですが、外部サーバーのIPアドレスはいつ変更になるか分かりませんので、ホスト名での通信をしたいところです。それに、なぜホスト名だと通信できないのか分かりません。 以下が、通信できない際のプロキシのアクセスログです。 1377752231.225 0 192.168.AAA.AAA NONE/400 1060 CONNECT :443 - NONE/- - 以下が、hosts追記後に通信できた際のプロキシのアクセスログです。 1377752448.729 2854 192.168.AAA.AAA TCP_MISS/000 172 CONNECT BBB.BBB.BBB.BBB:443 - FIRST_UP_PARENT/192.168.CCC.CCC - hostsに追記した内容 BBB.BBB.BBB.BBB hoge.moge.com 192.168.AAA.AAAがLAN内にあるPC、 BBB.BBB.BBB.BBBが外部サーバーのIPアドレス、 hoge.moge.comが外部サーバーのホスト名、 192.168.CCC.CCCがプロキシの先にある社内セキュリティゲートウェイです。 hoge.moge.comは、ネット上にあるnslookupするサイトで、名前解決できることは確認しています。 お分かりになる方がいらっしゃいましたら、お力添え頂けますでしょうか。

  • PCから携帯サイトを見た場合のリダイレクト

    PCから携帯サイトを見た場合に、PCサイトにリダイレクトしたいのですが、 .htaccessには、どのように書けばよいでしょうか? http://www.aaa.com/m/bbb/ → http://www.aaa.com/bbb/ http://www.aaa.com/m/~.php → http://www.aaa.com/~.html にしたいのですが、そのようなことは可能なのでしょうか? いろいろ検索したりしたのですが、見つけられませんでした。

  • jQuery.getの引数dataで動的にするには

    お世話になります。 jQuery.get()の第二引数dataによって、動的にJSONを取得したいです。 第一引数urlがhttp://test.com 第二引数が{id:1,name:tanaka}としてgetした場合 http://text.com?id=1&name=tanaka とリクエストしてると考えてよいのでしょうか。 ある大手サイトでget()時、dataによって取得できるJSONが違うのですが、 そのURLの最後に拡張子がありません。 JSONは拡張子が無くても良いというのを知りましたが これはJSONの形式でそのように動的に発行しているのでしょうか。 もしくはサーブレットあたりが動いて動的にさせてるのでしょうか。 たぶんPHPとかではないですよね。 上の例でいくと http://text.com?id=2 http://text.com?id=5 http://text.com?id=15 これで取得できるのが違います。 どうなってるのかさっぱり判りません。 すみません、よろしくお願いいたします。

  • プログラムの内容

    以下のプログラムは答えとして渡されたものなんですが、 コマンド引数を使ったプログラムの流れがよくわかりません。 簡単に解説してくれる方、いませんか? #include <stdio.h> int leapyear(int year){ if(year%400 == 0) return 1; else if(year%4 == 0 && year%100 != 0) return 1; else return 0; } void addmonth(int *day, int *month, int *year){ *day = 1; (*month)++; if(*month > 12) { *month = 1; (*year)++; } } int main(int argc, char *argv[]){ int year, month, day, a=0, max_days; int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; if(argc < 2) max_days = 10000; else max_days = atoi(argv[1]); printf("今日は西暦何年 何月 何日? "); scanf("%d%d%d",&year,&month,&day); while(a<max_days) { a++; day++; if(month == 2 && leapyear(year)) { if(day > 29) addmonth(&day, &month, &year); } else { if(day > month_days[month-1]) addmonth(&day, &month, &year); } } printf("今日から%d日後は、%d年%d月%d日です。",max_days, year, month, day); }

  • シェルスクリプトで外部ファイルを読み込みループさせたい

    いつもお世話になっております。 phpは多少理解できるのですが、linuxのシェルスクリプトは皆無です。 以下のphpをシェルスクリプトで書きたいのですが、サンプルソースを頂けないでしょうか。 実行したい事。 (1)外部のurl一覧(改行くぎり)csvを読み込む。 (2)それを1行ずつループで回し、wgetでファイルを取得 //コチラの配列は外部読み込みです。 $URL = array("ttp://aaa.com","ttp://bbb.com","ttp://ccc.com"); foreach($URL as $URL_N) { $get_url = "wget -r -nc -A html -R index.html ".$URL_N; exec($get_url); } 宜しくお願い致します。

  • .htaccess サイトアドレスの変更の際の告知ページ

    .htaccess での設定を教えてください。 旧サイト http://www.xxx.co.jp/aaa/ 新サイト http://ooo.xxx.co.jp/ 新URL変更にあたり.htaccessで Redirect permanent /aaa/ http://ooo.xxx.co.jp/301.html としましたが、 /aaa/bbb にアクセスがあった場合に転送がされません。 そこで、http://www.xxx.co.jp/aaa/  /aaa以下フォルダファイルすべてにアクセスをすると http://www.xxx.co.jp/indexhtml 転送されるようにしたいのですが、 どのようにすればよいのでしょうか? お忙しい中申し訳ございませんが、 宜しくお願い致します。

    • ベストアンサー
    • HTML

専門家に質問してみよう