PHPにて[http://example.com/a/index.php]から[http://example.com/b/index.php]にリダイレクトしたいです。 「header(”Location: http://”.$_SERVER[’HTTP_HOST’].dirname($_SERVER[’PHP_SELF’]).”/”.$relative_url);」という方法があるようですが、これでは「a」というフォルダ配下しか指定できません。

また、[http://example.com/b/index.php]の「http://example.com/」部分は、「http://test.com/c/d/」のように変化する可能性があります。 以上の状況で、リダイレクトする方法を教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答6件)

id:sadcns No.1

回答回数53ベストアンサー獲得回数0

ポイント17pt

headerは使用しませんが、HTMLのMETAタグにPHPでジャンプ先を出力するというのはいかがでしょう?CONTENTは0で。

id:router

ご解答ありがとうございます。

どうしてもPHPで処理できない場合は考えてみたいと思います。

また、METAタグのRefresh以外の代替案もあれば教えてください。

補足として、PHPの「header(”Location:」はHTTP/1.1では絶対パスにする必要があるようです。

「header(”Location: 相対パス」という方法は除外してください。

2005/02/13 00:35:59
id:sadcns No.2

回答回数53ベストアンサー獲得回数0

ポイント17pt

http://www.shtml.jp/htaccess/redirect.html

.htaccessでリダイレクト機能を利用する方法

2回目です。すみません。

1番目のURL

.htaccessを使用する方法

2番目のURL

URLは変わらなくなってしまうのですが、メインのPHPファイルで、require(),include(),require_once(),include_once()などを使用し、任意のファイルを取り込むというのはいかがでしょうか?

私の知識ではこのぐらいですね。。。

id:router

ご解答ありがとうございます。

2005/02/13 02:49:12
id:upride No.3

回答回数220ベストアンサー獲得回数1

ポイント17pt

>「

http://example.com/

Example Web Page

」部分は、「

」のように変化する可能性があります。

この部分に関してはプログラム上の条件でしょうから

プログラム内で何とかするしかないと思います。

つまり header(”Location: http://”.$relative_url);として

$relative_urlにお望みのとび先を設定するしかないと思われます。

「一つ上のディレクトリを指定する」とかなら便利なテクはありますが

ドメインが違うとなると絶対パスしか手がありませんよね。

変化する分だけswitch caseを仕込むと宜しいのでは?

ほかにjavascriptでlocation.href指定する方法もありますが

javascriptをもPHPで吐き出すのでしたら上記方法の方が

見通しがいいかと思います(フレーム指定が無いのでしたら)

id:router

ご解答ありがとうございます。

そしてすいません。質問文が間違っていましたorz

>「http://example.com/」部分は、「http://test.com/c/d/」のように変化する可能性があります。

この部分ですが、伝えたかったことは、「作成したPHPソースを、どのサーバにアップロードしても機能する」ようにしたいという事でした。

つまり「http://example.com/a/index.php」から「http://example.com/a/index.php」に。

http://test.com/c/d/index.php」からは、「http://test.com/c/b/index.php」に、どのサーバの、どのフォルダに設置しても、リダイレクトをさせたいということです。

質問文が間違っていたので申し訳ないです。

>「一つ上のディレクトリを指定する」とかなら便利なテク

多分これが知りたかったことだと思います。

2005/02/13 02:58:42
id:upride No.4

回答回数220ベストアンサー獲得回数1

ポイント17pt

>「一つ上のディレクトリを指定する」とかなら便利なテク

・・大げさにテクなんて書きましたがPHPで用意している

関数で十分できます

realpath関数をお使い下さい

相対パスを絶対パスにしてくれますから。

id:router

ご解答ありがとうございます。

realpathは試してみましたが、使用しているサーバの特性なのか、「http://example.com/a/index.php」ではなく「/home/web/html/a」のようなものが返ってきました。

おそらくサーバ上のローカルなパスが返ってきているのではないかと思います。

PHPでは、文字列系の関数を組み合わせて、自分で工夫するしかないのかな・・・

とりあえず寝て、おきてから考えることにします。

2005/02/13 03:46:42
id:vivisuke3141592 No.5

回答回数33ベストアンサー獲得回数0

ポイント16pt

apache の rewrite 機能を使います。

を参照してください。

.htaccess に書くよりも、httpd.conf に書く方がパフォーマンスが高いです。

id:router

ご解答ありがとうございます。

httpd.confでも出来るんですね。

ただ、共有タイプのホスティングなので、今回はこの方法を使うことはできなさそうです。

2005/02/13 12:46:02
id:kn1967 No.6

回答回数2915ベストアンサー獲得回数301

ポイント16pt

ソケット通信(メーラーやブラウザが行っているような通信行為をPHPから行う方法)を使えば、ある意味何でもありになりますよ。

参考URL の例2 が、お望みのことに近いかと思います。

id:router

ご解答ありがとうございます。

ちょっと難しくて良く分からなかったです。

てか、質問と、補足文もうまくかけてなかったかもしれないですね。

私のしたかったことは

http://example.com/a/b/c/d/index.php」で以下を実行すると

substr(dirname($_SERVER[’PHP_SELF’]),0,strrpos(dirname($_SERVER[’PHP_SELF’]),”/”))

「/a/b/c」という文字列が返せるので、「/e/index.php」を付け加えて「header(”Location」を使い、

http://example.com/a/b/c/e/index.php」にリダイレクトするということです。さらに、配布されているPHPのように、どのサーバのどのフォルダにアップロードしても「1つ上のフォルダの中の、別フォルダの中のページにリダイレクト」する方法です。

結果としては「header(”Location: http://”.$_SERVER[’HTTP_HOST’].substr(dirname($_SERVER[’PHP_SELF’]),0,strrpos(dirname($_SERVER[’PHP_SELF’]),”/”)).”/e/index.php”)」とすることで出来ました。

便利な関数か、一般的に使われているもっとスマートな方法がないかと思いましたが、PHPはそこまで用意はしてくれてないって事ですね。

これにて終了します。

2005/02/13 12:59:31

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません