でじくる。

主にプログラムの話題などを扱うブログです。

mod_rewriteのQSAフラグの存在をよく忘れる件

Apacheにはmod_rewriteというURLをリダイレクトしたりするのに

使える便利なモジュールがあります。

使いすぎるとかなりの黒魔術状態ですが、

やっぱり使ってしまう。

 

mod_rewriteの簡単な紹介記事は

 

mod_rewrite サンプル集

http://tech.bayashi.jp/archives/entry/techweb/2007/001981.html

 

など参考になります。

 

mod_rewriteは便利なんですが、一つ困ったことがあります。

たとえば、

http://foo.bar/hoge/foo?page=1

みたいなURLをmod_rewriteを使って書き換えた場合、

最初からついてたパラメータ

page=1

が消えてしまうんですね。

 

んで、元々ついてたGETのパラメータを消さないようにするための仕組みが

QSAフラグというやつで、

こんな感じに使います。

RewriteRule ^hoge/([0-9]+)$ /hoge.php?param=$1 [QSA]

 

この場合

http://foo.bar/hoge/1?page=2

にアクセスした場合

http://foo.bar/hoge.php?param=1&page=2

というURLにリダイレクトされる、と。

 

いつも忘れて検索してしまうので、メモっておきます。