mod_rewriteの正規表現でPerl拡張正規表現の文字クラスを使って嵌った。
最初、こんなの書いてたんですよ。
RewriteRule ^(\w)+$ index.php?mdl=$1&%{QUERY_STRING} [L]
で、Windows版のApache2ではまともに動いてたんですが、LinuxのApache1.3にあげたら動かなくなって「え〜〜??」となってたんですが。
Apache 1.3 : POSIX正規表現
Apache 2.0 : Perl互換正規表現(PCRE)
だったのんですね。で、当然"\w"文字クラスはPerl互換正規表現でサポートされているもので、POSIXには無い。
・・・やられた。そーゆーことかー・・・。結局次のように修正。
RewriteRule ^([0-9a-zA-Z_,\-\.])+$ index.php?mdl=$1&%{QUERY_STRING} [L]
うーん、"(.+)"でも良かった気がするのだけれど、まぁ、いっか。
Pattern は現在の URL に適用される (Apache 1.1.x では System V8、Apache 1.2.x 以降では POSIX の)正規表現です。
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
Pattern is a perl compatible regular expression, which is applied to the current URL.
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
(斜線, 太字は自分がつけました。)
Perl 互換正規表現 (PCRE)
正規表現 - Wikipedia
Perl は POSIX の拡張正規表現さえも上回る豊富な文法を持っている。
...
また、Perl には以下の定義済み文字クラスがある。