• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mod_rewriteの挙動が不可思議。ログをみると、余計に不可思議・・・お助けを・・・)

mod_rewriteの挙動が不可思議。ログをみると、余計に不可思議・・・お助けを・・・

このQ&Aのポイント
  • CentOS4、Apache2を使っています。mod_rewriteの設定を行いたいのですが、リクエストに対して正しい結果が返されず、エラーログを確認したところ不可思議な挙動が見られました。.htaccessに設定した内容を修正しても同様のエラーが発生し、原因がわかりません。どうすれば正常な動作になるのでしょうか?
  • mod_rewriteの設定に関して、HTTP要求に対して正しい結果を返すためにも慎重な操作が必要です。しかし、設定を行ってもエラーログを確認すると予期せぬ挙動が起きており、なかなか望む動作になりません。.htaccessファイルの書き方やサーバーの設定に問題があるのか、原因を突き止めることができません。アドバイスをいただけると助かります。
  • CentOS4とApache2を使用しており、.htaccessファイルを編集してmod_rewriteの設定を行いましたが、予期しない不具合が発生しています。エラーログを確認しても原因が特定できず、どのように修正すべきか迷っています。正しい書き方や他の設定項目に何か問題があるのでしょうか?アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

.htaccess は、設置しているディレクトリが起点になるので、 マッチングさせるパターンは ^/(.*)$ ではなく、^(.*)$ に なります。また、変換されたものが再度このパターンに一致すると 無限ループするようです。 下記のように変換後のパターンは除外するとよいでしょう。 <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^index.php$ - [L] RewriteRule ^(.*)$ /index.php?QS=$1 [L] </IfModule>

takashi_tm
質問者

お礼

ご回答ありがとうございます。 なるほど、そういうおちだったのですね。 そういえば、mod_rewriteって.htaccessで書いたことなかったかも。。。 なお、冷静にちょっとみたら、500エラーの際の(mod_rewriteの)ログをみたら、明らかに、いんたーなるなんちゃらで、無限ループおこしてました。 ありがとうございます。 ところで、お手すきでしたらでかまわないのですが、 当てずっぽう的にいろいろ試したら、 <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteRule ^(.*)$ index.php?QS=$1 [L] </IfModule> でうまくできました。 でも「RewriteBase /」は、index.php?QS=$1 [L]のiの直前に「/」がつくことと同じと考えていたのですが、 なぜ、うまくできちゃったのでしょうか? 恐縮ですが、もしお手すきでしたら、教えていただければ幸いです。 以上、よろしくお願い申し上げます。

その他の回答 (2)

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.3

> でも「RewriteBase /」は、index.php?QS=$1 [L]のiの直前に「/」がつく > ことと同じと考えていたのですが、 > なぜ、うまくできちゃったのでしょうか? RewriteLog を見ると、ループが「initial URL equal rewritten URL」で 検出されていました。想像ですが RewriteRule で index.html を /index.html に書き換えた場合は、/ の部分が一致しないので、 止まらないのではないでしょうか。 なお、書かれた方法で変換した場合、常に QS=index.html に なっていませんか。

takashi_tm
質問者

お礼

なんどもすみません。 >RewriteLog を見ると、ループが「initial URL equal rewritten URL」で >検出されていました。想像ですが RewriteRule で index.html を >/index.html に書き換えた場合は、/ の部分が一致しないので、 >止まらないのではないでしょうか。 あ、なるほどですね。。。 が、 >なお、書かれた方法で変換した場合、常に QS=index.html に >なっていませんか。 なっておらず、希望のとおりの動作になっています。 まあ、結果オーライかもしれませんが・・・ちょっと気持ち悪いかんじです。 ありがとうございます。

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

ええっと、.(ドット) はエスケープしないといけないですね。 <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^index\.php$ - [L] RewriteRule ^(.*)$ /index.php?QS=$1 [L] </IfModule> でした。

takashi_tm
質問者

お礼

再度ありがとうございます。 お世話様です。 私も見逃してました。 どうもありがとうございます。 以上、短文ではございますが、ありがとうございました。

関連するQ&A