また、[http://example.com/b/index.php]の「http://example.com/」部分は、「http://test.com/c/d/」のように変化する可能性があります。 以上の状況で、リダイレクトする方法を教えてください。
headerは使用しませんが、HTMLのMETAタグにPHPでジャンプ先を出力するというのはいかがでしょう?CONTENTは0で。
http://www.shtml.jp/htaccess/redirect.html
.htaccessでリダイレクト機能を利用する方法
2回目です。すみません。
1番目のURL
.htaccessを使用する方法
2番目のURL
URLは変わらなくなってしまうのですが、メインのPHPファイルで、require(),include(),require_once(),include_once()などを使用し、任意のファイルを取り込むというのはいかがでしょうか?
私の知識ではこのぐらいですね。。。
http://jp.php.net/manual/ja/function.require.php
PHP: require - Manual
ご解答ありがとうございます。
>「
Example Web Page
」部分は、「
」のように変化する可能性があります。
この部分に関してはプログラム上の条件でしょうから
プログラム内で何とかするしかないと思います。
つまり header(”Location: http://”.$relative_url);として
$relative_urlにお望みのとび先を設定するしかないと思われます。
「一つ上のディレクトリを指定する」とかなら便利なテクはありますが
ドメインが違うとなると絶対パスしか手がありませんよね。
変化する分だけswitch caseを仕込むと宜しいのでは?
ほかにjavascriptでlocation.href指定する方法もありますが
javascriptをもPHPで吐き出すのでしたら上記方法の方が
見通しがいいかと思います(フレーム指定が無いのでしたら)
ご解答ありがとうございます。
そしてすいません。質問文が間違っていました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」に、どのサーバの、どのフォルダに設置しても、リダイレクトをさせたいということです。
質問文が間違っていたので申し訳ないです。
>「一つ上のディレクトリを指定する」とかなら便利なテク
多分これが知りたかったことだと思います。
>「一つ上のディレクトリを指定する」とかなら便利なテク
・・大げさにテクなんて書きましたがPHPで用意している
関数で十分できます
realpath関数をお使い下さい
相対パスを絶対パスにしてくれますから。
ご解答ありがとうございます。
realpathは試してみましたが、使用しているサーバの特性なのか、「http://example.com/a/index.php」ではなく「/home/web/html/a」のようなものが返ってきました。
おそらくサーバ上のローカルなパスが返ってきているのではないかと思います。
PHPでは、文字列系の関数を組み合わせて、自分で工夫するしかないのかな・・・
とりあえず寝て、おきてから考えることにします。
http://www.net-newbie.com/trans/mod_rewrite.html
Apache module mod_rewrite
apache の rewrite 機能を使います。
http://www.net-newbie.com/trans/mod_rewrite.html
Apache module mod_rewrite
http://japache.infoscience.co.jp/rewriteguide/
Apache URL Rewriting Guide
を参照してください。
.htaccess に書くよりも、httpd.conf に書く方がパフォーマンスが高いです。
http://japache.infoscience.co.jp/rewriteguide/
Apache URL Rewriting Guide
ご解答ありがとうございます。
httpd.confでも出来るんですね。
ただ、共有タイプのホスティングなので、今回はこの方法を使うことはできなさそうです。
ソケット通信(メーラーやブラウザが行っているような通信行為をPHPから行う方法)を使えば、ある意味何でもありになりますよ。
参考URL の例2 が、お望みのことに近いかと思います。
ご解答ありがとうございます。
ちょっと難しくて良く分からなかったです。
てか、質問と、補足文もうまくかけてなかったかもしれないですね。
私のしたかったことは
「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はそこまで用意はしてくれてないって事ですね。
これにて終了します。
ご解答ありがとうございます。
どうしてもPHPで処理できない場合は考えてみたいと思います。
また、METAタグのRefresh以外の代替案もあれば教えてください。
補足として、PHPの「header(”Location:」はHTTP/1.1では絶対パスにする必要があるようです。
「header(”Location: 相対パス」という方法は除外してください。