mod_rewriteの設定で気になったこと
よく説明に「L」を付けるとそれ以降の処理をしませんと書かれていますが、体感的にはちょっと違います。
それ以降の処理をしないことはしないのですが、URLが書き換えられた場合は、再度最初から処理をやり直します。
そのため「L」を付けてあってもそこでは終わらず意図しない動作になってしまうことも…
書き換え後の再処理をさせないためには「END」を指定しないとダメです。
下記は、サービス時間外の除外したいディレクトリ以外への全てのアクセスを「/outsidehours」へリダイレクトし、除外したいディレクトリへのアクセスとサービス時間内でのアクセスはWordpressやPHP Frameworkを実行させるためindex.phpへ処理を引き継がせる記載例です。
もっと上手い書き方はあるとは思いますが、意図した動作に出来たのでメモ。
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/omitdirectory(.*) [OR]
RewriteCond %{REQUEST_URI} ^/outsidehours(.*)
RewriteRule ^(.+)$ /index.php?/$1 [END]
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0159
RewriteCond %{TIME_HOUR}%{TIME_MIN} <0500
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) “/outsidehours” [R,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /index.php?/$1 [QSA,L]