mod_rewrite 複数のパラメーターを書き換え

Apache

mod_rewrite 複数のパラメーターを書き換え

Apache .htaccess でURLを書き換えで書いたように、.htaccessにmod_rewriteの指定を書くことで、動的なURLも静的なURLに見せかけることができます。

複数のパラメーターがある時はどうでしょう。

たとえば

 http://hogehoge.jp/index.php?action=search&prefecture=1

というURLを

 http://hogehoge.jp/search?prefecture=1

としたいのであれば、Apache .htaccess でURLを書き換えで書いた.htaccessの書き換えルールの末尾を変えて

 RewriteRule  ^([0-9a-zA-Z_/-]+)$ index.php?action=$1 [QSA,PT] 

とします。

[QSA]は、「Query String Append」の略で、引数をつけたいときに使うフラグだそうです。
(By http://d.hatena.ne.jp/hato_mune/20080928/1222569429

でもどうせだったら

 http://hogehoge.jp/search?prefecture=1

じゃなくって、全部静的にしたいじゃないですか。

 http://hogehoge.jp/search/prefecture/1

みたいに。

そのためには.htaccessに

 RewriteRule  ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)$ index.php?action=$1&$2=$3 [QSA,PT] 

と書いておきます。

これで、ユーザーがアクセスする静的なURL

 http://hogehoge.jp/search/prefecture/1

は実際には

 http://hogehoge.jp/index.php?action=search&prefecture=1

にアクセスしていることになります。

パラメーターが増える場合は、rewrite ruleの正規表現とパラメーターを増やして

 RewriteRule  ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)$ index.php?action=$1/$2&$3=$4 [QSA,PT] 

などとします。

mod_rewrite難しい~
もっとスマートなやり方があれば、教えてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です