Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> PHP&MySQL -> RewriteRuleが効いているURLで、?以降の文字列を取得する方法

RewriteRuleが効いているURLで、?以降の文字列を取得する方法


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変数に、値が代入されました。
めでたしめでたし♪

この記事の最終更新日:2018/06/04
最初に記事を書いた日:2018/06/04

この記事をシェアする

このエントリーをはてなブックマークに追加

関連記事

Meteoric Streamについて

管理人

Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> PHP&MySQL -> RewriteRuleが効いているURLで、?以降の文字列を取得する方法