• ベストアンサー

GET変数をディレクトリのように表示する方法

お世話になります。 phpでのお話ですが、通常GETで変数を持たせる場合は http://www.hoge.com/index.php?a=1&b=2 http://www.hoge.com/?a=1&b=2  というURLになるかと思います。 これをディレクトリの一部のように 下記のように表示している場合がありますが、 http://www.hoge.com/1/2/ これはどのようにすればできるのでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

apacheのRewriteEngineなど使うことになりますが いくつか問題があります。 「http://www.hoge.com/?a=1&b=2」が「http://www.hoge.com/1/2/」なるとして (1)http://www.hoge.com/?b=1&a=2http://www.hoge.com/2/1/とするのでしょうか? つまり、a,bは並び順にかかわらずつねにaが前になるのでしょうか? (2)http://www.hoge.com/?a=1&a=2&b=3は どうするのでしょうか? (3)http://www.hoge.com/?a=1のみは http://www.hoge.com/1/とすればよさそうですが http://www.hoge.com/?b=2http://www.hoge.com//2/となりそうですがどうするのでしょうか とまぁ、固めないといけない仕様が多いので難しいとおもいますよ

kayakiss
質問者

お礼

ご丁寧にご回答ありがとうございます。 おそらく私が目標にしている方法はこのApacheを使った方法のようです。 ただ、私の環境はホスティングのため、Apacheは自由に設定ができません。 今後の目標として、Apacheが自由に設定できる環境での開発を目指します。 ありがとうございました!

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

http://www.hoge.com/1/2/ というURLでは難しいですね。他の方の回答にもありますがmod_rewriteなどを使うしかないでしょう。 http://www.hoge.com/xxxx/1/2/ としてよければ、「xxxx.php」というphpスクリプト(.htaccessのMultiViewでxxxxだけで動くようにしておく)を置いて、以降のURLの内容を$_SERVER['PATH_INFO']で受け取って分解すればいいように思います。 ただしブラウザが認識しているpathが実際と違ってきますので、リンクや画像ファイル、外部CSSファイルは全部DocumentRootからのpathで書かないといけません。

kayakiss
質問者

お礼

ご丁寧にご回答ありがとうございました! このお教えいただいたやり方は私でも理解できますが、 実際にはかなり面倒で大変ですね。。。 このURLに組み込む方法は良く使われているので 簡単なのかと思っていましたが、なかなか大変なのですね。

回答No.2

.htaccess のリダイレクトと正規表現を使用して実現します。 具体的には .htaccess ファイルに以下のように記述すると ご質問内容のような機能が実装できます。(パラメーターが数字のみの場合) RedirectMatch http://www.hoge.com/([0-9]*)/([0-9]*)/ http://www.hoge.com/index.php?a=$1&b=$2 詳しくは .htaccess と RedirectMatch でお調べください。

kayakiss
質問者

お礼

ご丁寧にご回答ありがとうございました! 良く使われているので簡単そうに見えて、中々大変なのですね。 htaccess と RedirectMatchで勉強してみます。

関連するQ&A