mod_rewiteの設定は.htaccessに記載していることだと思うが、ヘンテコな設定はかなりApacheに負荷を掛け、Temporary Service UnavailableやForbidenなどのエラーを頻発させてしまう。
よく使われる設定は、次のようなものだ。
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^db/([0-9A-Za-z]+)_(.*)\.html$ db/db\.php?id=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-d は「ディレクトリが存在しない場合」
さらに、次の RewriteCond %{REQUEST_FILENAME} !-f は「ファイルが存在しない場合」
リクエストされたディレクトリまたはファイルが存在しなければ、mod_rewiteのルール処理に行くよ。ということである。つまりルートディレクトリに置いた日には無駄にApacheのリソースを喰ってしまうのである。dbディレクトリにhtaccessを置くなど、ディレクトリ毎に設定する方策をとる必要がある。
また、ルール処理にできるだけ行かせないようにする記載方法も併せて施策としたい。
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !\.(css|gif|jp?g|png)$
RewriteCond %{REQUEST_URI} !^/images/.*$
RewriteCond %{REQUEST_URI} !^/s/.*$
RewriteRule ^db/([0-9A-Za-z]+)_(.*)\.html$ db/db\.php?id=$1 [L]