phpで自分のURLを取得する

phpで自分のURLを取得する方法がよくわからなかったので殴り書きメモ。

まず自分のphpのどこかに書いておく方法がある。しかしこれだとサーバー引越しとかしたとき直さないといけなくなるのでここでは無視。

基本に返ってブラウザがどうやってアクセスするかを確認。ブラウザがhttp://www.example.com/ddd/fff.phpにアクセスしたとき送られるHTTPヘッダはたとえば以下のようになる。

GET /ddd/fff.php HTTP/1.0
Accept: */*
Connection: close
Host: www.example.com

ここから$_SERVERなどの変数にいろいろ入ってくると思われるがどれがどれだかよくわからないが、たぶん以下のような感じだろう。上との対象で書くと。

$_SERVER['REQUEST_METHOD'] $_SERVER['REQUEST_URI'] $_SERVER['SERVER_PROTOCOL']
Accept: $_SERVER['HTTP_ACCEPT']
Connection: $_SERVER['HTTP_CONNECTION']
Host: $_SERVER['HTTP_HOST']

よって単純に考えれば以下のような感じでURLを取得できるか?

ポートが80じゃない場合はどうなるだろうか。その場合もHttpのHostヘッダに”Host: www.example.com:8080″見たいに入るから大丈夫か?

プロキシ経由の場合はサーバはプロキシからアクセスされるだけで、上に書いたことに大きな違いはないか?

IPアドレスでアクセスした場合は、HOSTがIPアドレスに変わるだけで大きな違いはないと思うが、この場合でもFDQNで取得したい場合はあらかじめどっかにかいとくしかないか?逆引きしてまですることじゃないと思う。

ではサイトのトップページを取得したい場合はどうするか?サイトのトップページがhttp://www.example.com/ddd/だとして、http://www.example.com/ddd/xxx/ppp.phpのアクセスから、トップページを取得したい場合。これはめんどくさそう。考えたくない。

いやその前にmod_rewriteを使っていて、QUERY_STRINGをディレクトリみたいに見せていた場合、$_SERVERの格変数にはどう格納されるのか?これもめんどくさい。調べるのもめんどくさい。

やっぱり素直にPHPに書いておいたほうが安全かな。

追記
pukiwikiの見ていたら関数を見つけたので適当に直してコピペ

ライセンスはpukiwikiに従う。

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)