mod_rewriteを使うため、
apache/conf/httpd.confで、
LoadModule rewrite_module modules/mod_rewrite.so
のコメントアウト解除をしましたが、どうにもうまくいきません。
mod_rewriteを有効にする際、
他に注意する点がありましたらご教授ください。
やりたいことは、.htaccessで、
RewriteEngine on
RewriteRule ^([0-9]+).html$ index.cgi?keyword=$1 [L]
という処理です。
上手くいかないのは、rewriteモジュールの組み込みなのか、rewrite の動作なのかどちらでしょうか?
まずは、apache 起動時のログを良く見てみるといいでしょう。
ルールの書換え後のアドレスは、フルパスで書くようになっていと思いますが大丈夫ですか?
RewriteBase が無くてもサイト構成によっては問題無いでしょうけど。
mod_rewrite は無事に動いているなら、.htaccess の方だけですね。
では、403は .htaccess の記述が原因なのかのチェックをします。
例のルールでは 0123.html のように数字だけの基本部+html の場合、index.cgi に keyword という名前のパラメータとしてその数字を渡すという事ですよね?
0123.html の場合、キチンと渡せてますか?
また、%A4%A2.html は対象外なので無視されるはずですが、
このルールを記入した .htaccess が存在する場合は403で、無い場合は問題なく表示できるのでしょうか?
%A4%A2.html ということは、デコードすると あ.html になると思うのですが、これで正しく表示できるのとは思えないのですが。
ご回答ありがとうございます。
大変失礼しました。
RewriteRuleに変更を加えておりました。
今検証中のものは次のようになります。
RewriteRule ^(.+).html$ http://127.0.0.1/index.cgi?keyword=$1 [L]
この実行結果は、
----------------------------------------------------------------------
Forbidden
You don’t have permission to access http://127.0.0.1/■¢.html on this server.
----------------------------------------------------------------------
となり、■の部分は、太陽のような文字化けになっています。
このソースを見ると、
----------------------------------------------------------------------
Forbidden
You don’t have permission to access http://127.0.0.1/あ.html on this server.
----------------------------------------------------------------------
になっています。
参考までに、0123.htmlでは、index.cgi?keyword=0123が動作しました。
想像ですが、.htaccessで勝手にURLデコードされていると思ってしまいました。
これは何が原因でしょうか。
ご回答ありがとうございます。
その後の調査で、mod_rewrite自体は
うまく機能していることが分かりました。
例えば、
http:/〜/abc.html→http:/〜/index.cgi?keyword=abc
にアクセスします。
しかし、下記のように、%が含まれる場合は、
403が返ってきてしまいます。
http:/〜/%A4%A2.html→403Forbidden
この原因はどこにあるのでしょうか。
ちなみに、スクリプトは、Linuxで正常に稼動しています。