[Apache-Users 7650] Re: .htaccess のrewriteルール
SASAO Takahiro
sasao @ p-strain.jp
2010年 3月 13日 (土) 15:00:08 JST
続けてすいません。笹尾です。
On Sat, 13 Mar 2010 12:41:17 +0900
"fujioka" <qhtsige @ apost.plala.or.jp> wrote:
> [Sat Mar 13 12:12:52 2010] [alert] [client 127.0.0.1] D:/upload/.htaccess:
> RewriteRule: cannot compile regular expression
妙な略し方をしてあったので、最初よくわからなかったんですが、
いずれのルールを書いても、
「RewriteRule: cannot compile regular expression」
というエラー(Internal Server Error)になった、という意味ですよね。
他の方からも指摘があるように、[=-%]という記述をすると、
不正な正規表現だ、と、エラーになるようです。
mod_rewriteに限った話ではなく、多くの処理系でそうなると思います。
$ perl -e 's/[=-%]//'
Invalid [] range "=-%" in regex; marked by <-- HERE in m/[=-% <-- HERE ]/ at -e line 1.
=-%じゃなくて、=%-と書けば、エラーにはなりません。
ただし、%20は%20ではなく半角スペースになっているはずなので、
藤岡さんが書いているルールではうまくいかないと思います。
さらに考察すると、=というのも、PHP側でうまく扱えないと思います。
=無しで書くなら、たとえば
RewriteRule "^([0-9A-Za-z\.'_ -]+)\.html$" htmpage2.php?yspec=$1 [L]
でしょうか。
=も使いたいという場合、PHP側でちょっと工夫が必要でしょう。
$_SERVER['QUERY_STRING']を自前で処理するとか、
書き換え先をhtmpage2.php/$1にして、PATH_INFOで受け取るとか。
--
笹尾 卓宏 @ P-strain <sasao @ p-strain.jp>
Apache-Users メーリングリストの案内