page_adsence

2014年2月4日火曜日

Apacheの条件付きログ

Apacheの条件付きのログを残す方法。

例えば、ドメインは一緒だけど、一階層目のディレクトリでサイトが異なる場合。

http://hogehoge.co.jp/a/
http://hogehoge.co.jp/b/

こういった場合に普通にバーチャルホスト切ると、
ログファイルが一緒になってしまい、混乱を招くので条件によってログファイルの出力先ファイルを変更するようにしました。

最終的なバーチャルホストはこんな感じ
<VirtualHost *:80>
    ServerAdmin admin@hogehoge.jp
    DocumentRoot /path/to/dir/web
    ServerName hogehoge.jp
    ErrorLog /path/to/dir/logs/error_log

    SetEnvIf Request_URI "^\/site_a.*$" a_log
    ErrorLog /path/to/dir/logs/error_log env=a_log
    CustomLog /path/to/dir/logs/access_log common env=a_log

    SetEnvIf Request_URI "^\/site_b.*$" b_log
    #ErrorLog /path/to/dir2/logs/error_log env=b_log
    CustomLog /path/to/dir2/logs/access_log common env=b_log
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !^/site_a
        RewriteCond /path/to/dir/web/%{REQUEST_FILENAME} -d
        RewriteCond /path/to/dir/web/%{REQUEST_FILENAME} -s [OR]
        RewriteCond /path/to/dir/web/%{REQUEST_FILENAME} -l
        RewriteRule ^(.*)$ /site_a$1 [PT]
        Alias /site_a /path/to/dir/web/

        RewriteCond %{REQUEST_FILENAME} !^/site_b
        RewriteCond /path/to/dir2/web/%{REQUEST_FILENAME} -d
        RewriteCond /path/to/dir2/web/%{REQUEST_FILENAME} -s [OR]
        RewriteCond /path/to/dir2/web/%{REQUEST_FILENAME} -l
        RewriteRule ^(.*)$ /site_b$1 [PT]
        Alias /site_b /path/to/dir2/web/
    </IfModule>
</VirtualHost>