mod_rewriteを使って、「/foo/bar/(.*)/」みたいなURLを、「/foo.php?id=なんちゃら」みたいなURLに変換させている場合に、意外と厄介なのが、?以降の文字列(QUERY_STRING)が、$_GET[“なんちゃら”]みたいな形式で、正常に取得できないことです。 要するに、こんな感じですね。 .htaccess: RewriteRule ^foo/bar/(.*)/ /foo.php?id=$1 [L] この場合、 /foo/bar/123/ のようにアクセスすると、 foo.phpでは、「$_GET[“id"]」で、 123の値を取得する事ができます。 しかしながら、 /foo/bar/123/?bar=555 とした場合、「$_GET[“bar"]」には、 値は何も入っていないのです。 んで、ここからが本題。 $_SERVER[“REQUEST_URI"]には、きちんと、 「/foo/bar/123/?bar=555」として、 ?以降の文字列が存在しているので、 explode関数を使って、「?」で切って、「=」で切れば良いだけの話です。 関数に書くと、こんな感じで済みます。// parse_query_strings()を実行すると、?以降の文字列を解釈して、$_GETに代入します。 function parse_query_strings(){ if(strpos($_SERVER["REQUEST_URI"], "?") !== FALSE){ list($dummy, $tmp) = explode("?", $_SERVER["REQUEST_URI"]); $data = explode("&", $tmp); foreach($data as $value){ list($k, $v) = explode("=", $value); if(empty($_GET[$k])){ $_GET[$k] = $v; } } } }これで、$_GET変数に、値が代入されました。 めでたしめでたし♪