Utilizzare file di log Apache separati per multisite WordPress
Tempo fa ho abbandonato Blogger e ho trasferito i miei blog sul mio sistema. Li ho ospitati lì con ogni singolo blog come VirtualHost per un po'. Successivamente, li ho importati in WordPress e ora li ospito da WP.
Quando li ospitavo localmente come virtual host, ogni blog utilizzava un file di log Apache separato, ma ora tutti i blog vengono registrati nello stesso file.
Non riesco a trovare un'impostazione in WordPress, e non c'è modo di specificarlo in un file .htaccess
poiché i siti sono virtuali. Cioè, i blog WordPress non si trovano effettivamente sul disco come directory separate (inoltre, le impostazioni di log non possono essere utilizzate in .htaccess
comunque).
Come può essere configurata un'installazione WordPress multisito in modo che uno o più siti registrino i propri accessi in un file di log separato?
Il secondo suggerimento di toscho sull'uso di SetEnvIf è promettente. Sono riuscito a far sì che gli accessi a un sito vengano registrati in un file di log separato e esclusi dal log principale utilizzando le direttive seguenti.
…
<IfModule log_config_module>
…
# Riutilizzo la variabile d'ambiente dontlog perché non c'è motivo di creare una variabile speciale (per me), quindi evita di dover usare un'espressione (inoltre, ha semplicemente senso)
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>
…
Questo funziona per un blog single-site, ma per il multisito, il problema è cercare di mantenere le cose ordinate e semplificare l'aggiunta di nuovi blog perché sembra che non sia possibile utilizzare variabili nei nomi dei file di log come segue, il che significa dover creare una voce separata per ognuno:
…
<IfModule log_config_module>
…
SetEnvIf Request_URI "^/blogs" dontlog
# Imposta la variabile d'ambiente con la sottoespressione regex corrispondente al nome del blog
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>
…
Alla fine ottengo un log contenente tutti gli accessi ai blog in un file denominato %{blog}e.log
.

Puoi configurare log personalizzati nel tuo file httpd-vhosts.conf
in base alla variabile HTTP_HOST
– se il tuo server è Apache e utilizzi sottodomini per ogni singolo sito.
Per sottodirectory (non testato):
SetEnvIf Request_URI ^sitename1 sitename1
SetEnvIf Request_URI ^sitename2 sitename2
CustomLog sitename1.log common env=sitename1
CustomLog sitename2.log common env=sitename2

Come ho detto, è quello che facevo prima di passare a WordPress. Ora non funzionerà perché i siti in wpmu non esistono come cartelle su disco o come host virtuali in Apache: blah.com/blogs/foo
, blah.com/blogs/bar
.
