Windows/iPhoneアプリ、ゲーム用フリー音源、ヒーリングミュージックのMeteoric Stream


日本語 | English
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

この記事をシェアする

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

関連記事

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