質問: お世話になります。 apacheのmod_rewriteの設定が読めずに困っています。 ブラウザで、下記のアドレスにアクセスした際 *https://eg.com/test/img/100.jpg* apacheに下記のような設定があったら、実際にはどこにアクセスされるでしょうか? ``` RewriteCond %{REQUEST_URI} ^/test/img/(.*) RewriteCond /www/%{SERVER_NAME}/cms/test_img/%1 -f RewriteRule ^/test/img/(.*)$ /www/%{SERVER_NAME}/cms/test_img/$1 [L] ``` また、実ファイルの存在有無により挙動が変わるそうなのですが どう変わるかもご教示頂ければ幸甚です。 お手数をおかけしますが、よろしくお願いいたします。
回答: 自分でデバッグできるようになりましょう。 Apache 2.4 系で mod_rewrite のログを出力させるには httpd.confに一行書き加えるだけで、mod_rewriteの動作を追える情報がaccess_logに残るようになります。 > > LogLevel info rewrite:trace8 > > > ドキュメントも読みましょう。 mod_rewrite - Apache HTTP Server Version 2.4 意図としては、 REQUEST_URIがそういう文字列で始まり、 カッコでくくった箇所の文字列を一旦変数保持して、 かつ所定のパスにファイルが存在するのを確認したら リダイレクトするってことだと思うのですが、 RewriteRule行で絶対パスが記述されているのでそのパスにあるファイルが応答されることになるかと。 RewriteRule行の末尾に[L]があるので、書き換えたらこれ以上評価しないってなりますが。 Lがなければ、続いて記述されるRewriteCondの評価が続きます。 つまり、この条件にヒットしなかった場合に、 さらに後述されるRewriteCondの評価の最後に、 エラーページやログインページへのリダイレクトを記述することが多い気がします。