ラベル mod_rewite の投稿を表示しています。 すべての投稿を表示
ラベル mod_rewite の投稿を表示しています。 すべての投稿を表示

2010年11月17日水曜日

mod_rewriteでURL末尾のスラッシュを補完

同じコンテンツでも、アクセス解析ソフトなどは末尾のスラッシュの有無によって別ページと見なしてしまいます。
そうした問題も、このmod_rewriteで解消できます。

RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.[^/\.]+$
RewriteRule .* %{REQUEST_URI}/ [L,R]


このケースだとURLに.(ドット)を含まない場合はディレクトリと見なして末尾スラッシュ補完をしています。

参考
http://d.hatena.ne.jp/hiro-tak/20080508

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