末尾のスラッシュ補完

mod_rewriteBlosxomにリクエストされたパスをパラメーターとして渡すようにしている関係で、カテゴリーや年月ごとのページでmod_dirのような末尾のスラッシュ補完が効かないことに今さら気づいたので直した。いろいろ今さら。

RewriteEngine On

RewriteBase /blog/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([-/0-9A-Z_a-z]+[^/])$ $1/ [R=301,L]

通常はRewriteBaseが必須で、無いと$1がサーバーのファイルシステムの絶対パスになってしまう。勿論Blosxomに渡すRewriteRuleより前に書く。クソみたいな正規表現なのはApache 1.3系のmod_rewriteだから。

mod_rewriteの書き方は一生覚えないまま、なんとなく付き合っていきそう。


ここらへんはBlosxomのプラグインで扱うともっと柔軟に書けるので、拡張子なしのpermalinkを作れるようになったり色々素晴らしそうなんだけど、blosxom.cgiを二回通す羽目になったりしそうでやらない方が良さそう。今ならもしかしてreplaceState()を使ってクライアント側で補完したりすれば良いのかな。あとで試してみよう。