しばらく前に、私はBloggerを離れ、私のブログを自分のシステムにダウンロードしました。私はしばらくの間VirtualHostとしてそれぞれのブログでそこにそれらをホストしました。後で、私はそれらをWordPressにインポートし、WPからホストしています。
仮想ホストとしてローカルにホストしていたときは、それぞれが別々のApacheログファイルを使用していましたが、現在はすべてのブログが同じファイルに記録されています。
私はWordPressで設定を見つけることができません、そしてサイトが仮想であるので.htaccess
ファイルでそれを指定する方法がありません。つまり、WordPressブログは実際にはドライブ上に別々のディレクトリとして配置されていません(それ以外に、ログ設定を.htaccess
で使用することはできません)。
1つまたは複数のサイトが独自のログファイルにログを記録するように、WordPressマルチインストールをどのように設定できますか?
toEnchoによるSetEnvIfの2番目の提案は有望です。 1つのサイトへのアクセスを別のログファイルに保存し、下記のディレクティブを使用してメインログから除外することができました。
…
<IfModule log_config_module>
…
# I’m re-using the dontlog environment variable because there is no reason to make a special variable (for me), so it avoids having to use an expression (plus, it just makes sense)
SetEnvIf Request_URI "^/blogs" dontlog
SetEnvIf Request_URI "^/blogs/blog1" blog1
SetEnvIf Request_URI "^/blogs/foobar" foobar
…
CustomLog "../Logs/Main/access.log" common env=!dontlog
CustomLog "../Logs/Blogs/blog1.log" common env=blog1
CustomLog "../Logs/Blogs/foobar.log" common env=foobar
…
UnsetEnv dontlog
UnsetEnv blog1
UnsetEnv foobar
</IfModule>
…
これは単一サイトのブログでは機能しますが、マルチサイトでは、次のようにログファイル名に変数を使用することができないように見えるため、問題を整理して新しいブログを簡単に追加できます。一人ひとりのために:
…
<IfModule log_config_module>
…
SetEnvIf Request_URI "^/blogs" dontlog
# Set environment variable to matched regex subexpression corresponding to blog name
SetEnvIf Request_URI "^/blogs(.+/)" blog=$1
…
CustomLog "../Logs/Main/access.log" common env=!dontlog
CustomLog "../Logs/Blogs/%{blog}e.log" common env=blog
…
UnsetEnv dontlog
UnsetEnv blog
</IfModule>
…
私は%{blog}e.log
という名前のファイルにすべてのブログアクセスを含むログを書きます。
httpd-vhosts.conf
変数に応じてHTTP_Host
に カスタムログ を設定することができます - あなたのサーバがApacheで各サイトにサブドメインを使う場合。
サブディレクトリの場合(テストされていない):
SetEnvIf Request_URI ^sitename1 sitename1
SetEnvIf Request_URI ^sitename2 sitename2
CustomLog sitename1.log common env=sitename1
CustomLog sitename2.log common env=sitename2