2010年11月16日火曜日

mod_rewriteでURLを書き換えつつクエリはそのまま引き継ぐ

「mod_rewriteを使って動的ページを静的ページのように見せる」というのが、SEO的に良いということで一時期流行りました。

現在ではサーチエンジンも進化し、静的だろうか動的だろうか評価は変わらなくなったようですが、人間の目から見てもクエリ文字列が並ぶよりはディレクトリ階層になっているほうがきれいなので、サイト構築の常套手段として定着している感があります。

mod_rewriteを使って動的ページを静的ページというテクニックはググればいくらでもでてきます。
たとえばこんな感じ。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9A-Za-z_]+)/$ index.php?var1=$1 [L]


こうすることで、http://example.com/hoge/ が http://example.com/index.php?var1=hoge として処理されるようになります。

ただこのままでは http://example.com/hoge/?page=1 とか http://example.com/hoge/?search=hoge のように、後ろにクエリパラメータが来てもその値が取得できないという問題があり、不便です。

これを解決するのがQSAというオプション。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9A-Za-z_]+)/$ index.php?var1=$1 [QSA,L]


これでオシリに引数がくっついてもindex.phpで処理できるようになります。

参考
http://blog.fkoji.com/2008/07172155.html

0 件のコメント:

コメントを投稿