PHPでUR転送する方法

このQ&Aのポイント
  • PHPで ?seq= の後に続く数に応じてURL転送する方法を紹介します。
  • 旧サーバで動いていたPHPは外部から張ってあるリンクをそのまま新サイトで活かすことができないため、URL転送の方法を模索しています。
  • 先程探し当てたPHPのソースコードを書き換えることで、?seq= の後の数に応じてURL転送を実現することができます。
回答を見る
  • ベストアンサー

PHPで ?seq= の後に続く数に応じてUR転送するには?

PHPで ?seq= の後に続く数に応じてUR転送するには? 最近、勤務先のサイトを移設しました。 旧サイトの入っていたレンタルサーバがサイバー攻撃を受けて壊滅してしまったために別の業者のサーバで新規にサイトを作ったのですが、旧サーバで動いていたPHPは旧サーバの業者が作ったブラックボックスなので、外部から張ってあるリンクをそのまま新サイトで活かすことが出来なくて困っています。 例えば、 http://www.okwave.ok/test.php?seq=1 にアクセスされた場合は http://www.okwave.jp/ に転送 http://www.okwave.ok/test.php?seq=2 にアクセスされた場合は http://www.goo.ne.jp/ に転送 http://www.okwave.ok/test.php?seq=3 にアクセスされた場合は http://www.yahoo.co.jp/ に転送 という事がしたいとします。 先程、「PHP 転送」と検索していて、下のようなソースのPHPを作るとURL転送は出来るということがわかりましたが、下の例では、 http://www.okwave.ok/test.php?1 にアクセスされた場合は http://www.okwave.jp/ に転送 http://www.okwave.ok/test.php?2 にアクセスされた場合は http://www.goo.ne.jp/ に転送 http://www.okwave.ok/test.php?3 にアクセスされた場合は http://www.yahoo.co.jp/ に転送 ということになってしまいます。 サーチエンジンで色々検索してみると、seqコマンドというものがひっかかってくるのですが、ということはもしかして、seq= と指定してしまうと、PHPのコマンドに関係してしまって、私の望むようなことは出来ないということでしょうか? 下のソースを部分的に書き替えることで、 http://www.okwave.ok/test.php?seq=1 にアクセスされた場合は http://www.okwave.jp/ に転送 http://www.okwave.ok/test.php?seq=2 にアクセスされた場合は http://www.goo.ne.jp/ に転送 http://www.okwave.ok/test.php?seq=3 にアクセスされた場合は http://www.yahoo.co.jp/ に転送 という事を実現できないでしょうか? できるとしたら、どう書き替えればいいでしょうか? ↓これが、先程探し当てたソースです。 <?php switch(array_shift(array_keys($_GET))) { case 0: // 何も指定しない時 header("Location: http://www.okwave.jp/"); break; case 1: // ?1 のとき header("Location: http://www.okwave.jp/"); break; case 2: // ?2 のとき header("Location: http://www.goo.ne.jp"); break; default: // その他の時 header("Location: http://www.yahoo.co.jp/"); } exit; ?> PHPの基礎知識がないのですが、Perlは少しわかるのでPHPも入門サイトなどを見ると部分的には「ああ、こういう意味かな?」と想像できる部分はあるものの、じっくり勉強する余裕がなく、何とか早急に対応しなければなりません。 どうかよろしくお願い致します。

  • chack
  • お礼率100% (283/283)
  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • 20091110
  • ベストアンサー率66% (2/3)
回答No.3

ページ間のデータ送信方法でよく使われるのが「GET」「POST」 読みはそれぞれゲットとポストです。 違いはここでは割愛して、http://www.okwave.ok/test.php?seq=1 を例に見てみます。 seq=1 はGET送信の書き方です。 受け取り先のPHP(test.php)内、GETで送られたデータ「seq」は$_GET['seq']と表現します。これの値として「1」が入っています。 この値を使って飛び先を分岐させます。 switch文を使ってもよいのですが、ifの方が色々ラクだと思いますので今回if文で書いてみます。 ※1行文の先頭にある「//」はその行はコメント・注釈ですよ、という意味です。 //$_GET['seq']の中身がからっぽではなくて(関数の前の!は否定を表す)、値はセットされているし、しかもその値は数字だったら以下の処理を行う if(!empty($_GET['seq']) && isset($_GET['seq']) && is_numeric($_GET['seq'])){ if($_GET['seq']==1){ //もし$_GET['seq']の中身が「1」だったら header('Location:http://www.okwave.jp/'); //このURLに転送 exit(); //処理を終了する }else if($_GET['seq']==2){ //じゃなくて、もし$_GET['seq']の中身が「2」だったら header('Location:http://www.goo.ne.jp/'); //このURLに転送 exit(); //処理を終了する }else if($_GET['seq']==3){ //ではなくて、もし$_GET['seq']の中身が「3」だったら header('Location:http://www.yahoo.co.jp/'); //このURLに転送 exit(); //処理を終了する } } 処理内容はyambejpさんのソースと意味的に同じです。 ご質問内容にありましたソース内「array_shift(array_keys($_GET))」の箇所ですが、このように書くこともあるんだねー、という感じです。

chack
質問者

お礼

丁寧なご回答ありがとうございます。 実は、後から、外部からのリンクに記載ミスが見つかり、?seq だけでなく?faq でアクセスされた場合も対応しなければならないことが判明したので、発展型まで教えて頂いたおかげ様をもちまして対応が可能となり、大変助かりました。 元々のソースを殆どいじらない形ですと、getする内容が複数になると対応できなかったので。 どうもお世話になりました!

その他の回答 (2)

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

んー、正直 そちらが探し当てたソースも なんで 一行目がそんな書き方なのか謎ですが、とりあえず、何か事情があったんだろうと思って、おいて置くとして。。 > seq= と指定してしまうと、PHPのコマンドに関係してしまって、 初耳です。多分、平気です。 とりあえず、難しく考えないで すごく初歩的な質問なんだろうと解釈して答えます。 > switch(array_shift(array_keys($_GET))) { を switch($_GET[seq]) { と 置き換えてください。

chack
質問者

お礼

ご回答ありがとうございました。 > なんで 一行目がそんな書き方なのか謎ですが あ、そうなんですか。 目的はおかげさまで達することが出来ましたが、その1行目の件が不思議というご指摘も今後のために参考になりました。 急場は切り抜けたので、この後、これがどういうことなのかを時間をかけて勉強してみたいと思います。 どうもありがとうございました!

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

微妙に意図がわからないのですが、こういうことですか? <?php switch(isset($_GET["seq"])?$_GET["seq"]:array_shift(array_keys($_GET))) { case "1": // ?1もしくはseq=1 のとき header("Location:http://www.okwave.jp/"); break; case "2": // ?2 もしくはseq=2のとき header("Location:http://www.goo.ne.jp"); break; default: // その他の時 header("Location:http://www.yahoo.co.jp/"); break; } ?>

chack
質問者

お礼

ご回答、ありがとうございました。 そうですそうです。 教えて頂いた形で上手く行きました。 お世話になりました!

関連するQ&A

  • index.php

    教えてください PCサイトのルートサーバーに以下のindex.phpを組み込みました。 <?php //User Agent 取得 $ua = $_SERVER['HTTP_USER_AGENT']; //Browser 判別 switch (true) { case (substr_count($ua,"Mozilla")): break; case (substr_count($ua,"Opera")): break; default: header("Location: http://mobile.abcdxxx.com/"); break; } ?> <html> <head> <title>PCです</title> </head> <body BgColor="#98FB98"> </body> </html> PCからアクセスした場合はHTMLが表示されますが、 携帯電話からアクセスした場合は mobile.abcdxxx.com に飛びません。 PCサイトは  www.abcdxxx.com 携帯サイトは  mobile.abcd.com です。 携帯電話で指定したurlは www.abcdxxx.com です また、携帯電話で www.abcdxxx.com/index.php と 指定するとちゃんとmobile.abcd.comが表示されます mobile.abcd.comにはindex.phpが組み込まれています。 よろしくお願いします

    • 締切済み
    • PHP
  • PHPがどうしても反映されません

    ソフトバンク携帯から画像を転載できないようにする方法をいろいろと 模索した結果、PHPが有効だということがわかりました。 http://apachephp.seesaa.net/category/1648379-1.html 上記のサイトを参考にし、以下のようにつくってみました。 --------------------test.htmlの内容------------------------------ <?xml version="1.0" encoding="shift_jis"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <title>テスト</title> </head> <body> <img src="http://xxx.jp/test.php" /> </body> </html> ---------------------ここまで------------------------------------- ---------------------test.phpの内容------------------------------ <?php header('Content-Type: image/jpeg'); header('x-jphone-copyright: no-transfer'); @readFile('http://xxx.jp/01.jpg'); ?> --------------------ここまで-------------------------------------- 理想は、「http://xxx.jp/test.html」を開くと「http://xxx.jp/01.jpg」 の画像が表示されることです。 まず、レンタルサーバの環境ですが、PHPに対応しております。 ためしに、test.phpの内容を <?php echo 'test'; echo 'てすと'; ?> とし、http://xxx.jp/test.phpに直接アクセスしてみました。 すると、「test」はきちんと表示されました。 けれど、「てすと」はなぜか文字化けしてしまいました。 「test.php」の内容を <?php header('Content-Type: image/jpeg'); @readFile('http://xxx.jp/01.jpg'); ?> と、「header('x-jphone-copyright: no-transfer');」を消し test.htmlにアクセスしてみました。 けれど、画像は表示されませんでした。 そのほか、外部へのアクセスではなく、test.htmlの「body」内に直接 <?php header('Content-Type: image/jpeg'); header('x-jphone-copyright: no-transfer'); @readFile('http://xxx.jp/01.jpg'); ?> を入力した場合は表示されるかどうかを試してみました。「body」内に 入力を終えたあと、「http://xxx.jp/test.html」に直接アクセスしてみま したがやはり画像は表示されません。 あとは、「@readFile」の@をはずしてみたり、「readfile」とFを小文字に してみたり、「'」を「"」に変更してみたり……。 わたしなりに考えうる手はつくしました。検索エンジンでもいろいろと 検索して調べてみました。しかし、どうしても解決できませんでした。 そこで、上級者のお知恵をお借りしたく思い、教えてgooへ質問いたしました。 どうかご教授のほど、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPを使い転送

    http://******/ (index.php) にアクセスすると 瞬時に http://******/index.cgi に転送するようにするには どうしたらいいのでしょうか ソースまたは、参照URLを 書いてくれるとうれしいです あとで補足されても困りますので 先に・・・・ 今使用しているサーバーが http://******/ (index.cgi を読み込んでくれないんです ですが PHP(index.php)ですと 読み込んでくれるので 転送PHPを必要としています

    • ベストアンサー
    • PHP
  • PHPのクエリ付(?)URLの転送

    サーバーに関する詳しいことはまったくわかってない人間なのですが、 現在PHP?smarty?ベースのサーバでホームページを開設しています。 それをhtmlファイルを自由に配置できる一般的なサーバと分けて管理することになりました。 PHPのサーバを(A)、htmlのサーバを(B)とすると、 (B)サーバでトップ、カテゴリーページをhtmlで作成。 (A)サーバで詳細ページをPHPで作成します。 (A)サーバーで使っていたドメイン(xxx.jp)を(B)サーバにうつし、 (A)サーバに新しいドメイン(???.jp)を割り当てます。 現在のページ(Aサーバ)は http://www.xxx.ne.jp/?xyzoo=ooooo http://www.xxx..ne.jp/?mode=vrae=oooooo&awaa=1 (oooは数字) のようにページが作成されます。 その他(txtファイルなど)ファイルはアップロードできません。 それを(B)サーバではhtmlで作成し、ファイル名もabc.htmlなどと変わります。 ですので http://www.xxx.ne.jp/?mode=vrae=oooooo&awaa=1 にアクセスしてもトップページが表示されるだけです。 これらにアクセスすると、新しいファイルに転送するにはどうすればよいでしょうか。 (http://www.xxx.ne.jp/?mode=vrae=oooooo&awaa=1にアクセスすると、 http://www.xxx.ne.jp/abc.htmlに転送 (http://www.xxx.ne.jp/?mode=vrae=oooooo&awaa=2にアクセスすると、 http://www.xxx.ne.jp/def.htmlに転送 ) また、http://www.xxx.ne.jp/?xyzoo=oooooにアクセスされると、 今度は、違うサーバのhttp://www.???.ne.jp/?xyzoo=oooooです。 リダイレクトとか色々調べてみたのですが、結局わからずでした。。。 (.htaccess で Redirect permanent /?mode=vrae=oooooo&awaa=1 http://www.xxx.ne.jp/abc.html としてみたけどだめでした…) もう一つ、今度は 新しいドメイン(http://www.???.ne.jp/)になった(A)サーバについて、 詳細ページはhttp://www.???.ne.jp/?xyzoo=ooooo等で使うのですが、 トップページもアクセスできるようになります。 トップページhttp://www.???.ne.jp/にアクセスされると、新しいサーバのhttp://www.xxx.ne.jp/に転送したく思ってます。 現状では、(A)サーバの転送はmeta や javascript で転送する方法しか思いつきません。 PHP?smarty?で転送する方法は無いでしょうか。 なお、新しい(B)サーバは一般的なサーバ(?)で、ファイルは基本的に何でも置けます。 古いPHPの(A)サーバはsmarty.server?のタグでページを作成し、 その他ファイルを置けないどころか、head内も触れません…。 (metaやjavascriptはbody内に書くしかないのです) どなたか詳しい人、教えていただけませんか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 拡張子htmlでphpを動かす

    会社の携帯サイトにGoogleAnalyticsのタグ(php)を入れたいのですが、上手くいきません。 サイトは既にhtmlでガッツリ作られているので、拡張子htmlのまま行きたいのです。 .htaccessに「AddType application/x-httpd-php .html」を書けば良い という情報は見つけたのですが、その通りに行っても出来ませんでした。 試しに <?php header("Location: http://www.yahoo.co.jp/") ?> とだけ書いた.htmlを作ってみましたが動作しません。 原因は何でしょうか?よろしくお願いいたします。 phpのバージョンは5.2.8です

    • ベストアンサー
    • PHP
  • PHPを使ったリダイレクトを教えてください

    私はPHPについて全く知識がないのですが、 PHPを使ったリダイレクトを教えてください。 ネット上で調べて、 <?php header("Location: http://www.xxxxx.com/"); ?> こんなコマンドを使えばリダイレクトが出来るというのはわかったのですが、 そもそもPHP自体を使ったことがないため、 どのようにウェブサイト上に反映していいのかがわからないのです。 メタによる転送は認知していますが、 使い勝手が悪いのと、ブラウザ上の設定で防げてしまうようなので、 PHPを使いたいと思っております。 (アフィリエイトに使います ASPの許可はすでに貰ってます) .htaccessも考えましたが、 サイト事に設定が必要になってしまうので、 アフィリエイトサイトには不向きではないかと思っています。 もしよろしければ教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 各ページ毎にスマートフォンとPCを振り分けるPHP

    現在、携帯サイトとPCサイトをPHPで振り分けております。スマートフォンサイトを構築したので、同じく振り分けをしたいと思っているので、各ページ毎に振り分けるコードを教えて下さい。 例えば… スマートフォンから http://www.〇〇〇.jp/ にアクセスがあった場合。 http://www.〇〇〇.jp/smt/ へ転送。 PCから http://www.〇〇〇.jp/smt/ にアクセスがあった場合。 http://www.〇〇〇.jp/ へ転送。 スマートフォンから http://www.〇〇〇.jp/ABC.html にアクセスがあった場合。 http://www.〇〇〇.jp/smt/ABC.html へ転送。 PCから http://www.〇〇〇.jp/smt/ABC.html にアクセスがあった場合。 http://www.〇〇〇.jp/ABC.html へ転送。 といった感じで対応するページに対応させたいです。 よろしくお願い致します。

    • 締切済み
    • PHP
  • phpのユーザーエージェントでの振り分け方法

    phpのユーザーエージェントでの振り分け方法 質問お願いします。 phpのユーザーエージェントでの振り分け方法を調べまして $ua = $_SERVER['HTTP_USER_AGENT']; if ((strpos($ua, 'Android') !== false) && (strpos($ua, 'Mobile') !== false) || (strpos($ua, 'iPhone') !== false) || (strpos($ua, 'Windows Phone') !== false)) { // スマートフォンからアクセスされた場合 header("Location: smartphone/index.html"); exit(); } elseif ((strpos($ua, 'Android') !== false) || (strpos($ua, 'iPad') !== false)) { // タブレットからアクセスされた場合 header("Location: tablet/index.html"); exit(); } elseif ((strpos($ua, 'DoCoMo') !== false) || (strpos($ua, 'KDDI') !== false) || (strpos($ua, 'SoftBank') !== false) || (strpos($ua, 'Vodafone') !== false) || (strpos($ua, 'J-PHONE') !== false)) { // 携帯からアクセスされた場合 header("Location: mobile/index.html"); exit(); } else { // その他(PC)からアクセスされた場合 header("Location: pc/index.html"); exit(); } とコピペで記入してスマホなどを振り分けています。 safari6とsafari7で見た時だけ header("Location: tablet/index.html"); に振り分けたいのですが、どうしたらよいでしょうか? 素人ですいません。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpのファイルの転送

    サイトのトップページに一行掲示板を載せたいのですが はじめてで何処にアップロードしていいやら解かりません どうか詳しく教えて頂けますか? サーバーはland.to http://www.land.to/faq.php#ID10 転送にはいつもFttpかホームページビルダーを使っています。今回、アップロードしたい掲示板はhttp://www.phpweb.jp/lineboard/ あと、この掲示板のphpのファイルはフォルダにいれて送信しても良いのでしょうか?

  • PHPのheader()について

    OS:freebsd4.8 PHP:php-4.3.2 apache2 を使用しております。 ドキュメントルートに <HTML> <HEAD> <TITLE>検索エンジン</TITLE> </HEAD> <BODY> <CENTER><H1> 検索エンジン </H1></CENTER> <FORM METHOD= post ACTION = search.php> <TABLE BORDER = 4 WIDTH = 250 ALIGN = CENTER> <TR BGCOLOR = "#CCCCCC"> <TH>検索キーワード</TH> <TD><INPUT TYPE= text NAME= keywd size = 20 /></TD> </TR> <TR> <TH>エンジン</TH> <TD> <SELECT NAME = ENG> <OPTION VALUE = "yahoo">Yahoo!</OPTION> <OPTION VALUE = "google">google</OPTION> <OPTION VALUE = "goo">goo</OPTION> </SELECT> </TD> </TR> <TR> <TD COLSPAN ="2"><CENTER><INPUT TYPE="submit" value="検索" /><CENTER></td> </TR> </TABLE> </FORM> </BODY> </HTML> というtest.htmlをおいてます。 phpスクリプトとして <?php $stringkey = urlencode($keywd); switch($ENG){ case "yahoo": $url = "http://www.yahoo.co.jp/bin/search?p="; break; case "goo": $url = "http://www.goo.ne.jp/default.asp?MT="; break; case "yahoo": $url = "http://www.google.co.jp/search?q="; break; } header("Location: ".$url.$stringkey); header("HTTP/1.1"); ?> search.phpにパラメータを渡していますが 白いページしか表れません。 header()関数の記述が悪いのでしょうか? apache2の設定でしょうか? ちなみに2ファイルともドキュメントルートに配置してます。 よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう