Utilizarea fișierelor de log separate Apache pentru WordPress multisite

6 apr. 2012, 03:36:39
Vizualizări: 1.48K
Voturi: 3

În urmă cu ceva timp, am părăsit Blogger și am descărcat blogurile mele pe sistemul meu. Le-am găzduit acolo cu fiecare blog individual ca VirtualHost pentru o vreme. Mai târziu, le-am importat în WordPress și acum le hostez din WP.

Când le hostam local ca virtual hosts, fiecare folosea un fișier de log Apache separat, dar acum toate blogurile sunt înregistrate în același fișier.

Nu găsesc o setare în WordPress și nu există nicio modalitate de a o specifica într-un fișier .htaccess deoarece site-urile sunt virtuale. Adică, blogurile WordPress nu sunt de fapt localizate pe disc ca directoare separate (în plus, setările de log nu pot fi folosite în .htaccess oricum).

Cum poate fi configurată o instalație WordPress multi-site astfel încât unul sau mai multe site-uri să înregistreze în propriul lor fișier de log?

Sugestia lui toscho de a folosi SetEnvIf este promițătoare. Am reușit să obțin accesul la un site într-un fișier de log separat și să-l exclud din log-ul principal folosind directivele de mai jos.

…
<IfModule log_config_module>
  …
  # Folosesc din nou variabila de mediu dontlog deoarece nu este nevoie să creez o variabilă specială (pentru mine), astfel evit să folosesc o expresie (plus, are sens)
  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>
…

Aceasta funcționează pentru un blog cu un singur site, dar pentru multisite, problema este încercarea de a păstra lucrurile organizate și de a simplifica adăugarea de bloguri noi deoarece se pare că nu este posibil să folosești variabile în numele fișierelor de log, așa cum urmează, ceea ce înseamnă să faci o intrare separată pentru fiecare:

…
<IfModule log_config_module>
  …
  SetEnvIf Request_URI "^/blogs"         dontlog
  # Setează variabila de mediu la subexpresia regex corespunzătoare numelui blogului
  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>
…

Am obținut un log care conține accesul la toate blogurile într-un fișier numit %{blog}e.log.

0
Toate răspunsurile la întrebare 1
5

Poți configura jurnale personalizate în fișierul tău httpd-vhosts.conf în funcție de variabila HTTP_HOST – dacă serverul tău este Apache și folosești subdomenii pentru fiecare site.

Pentru subdirectoare (netestat):

SetEnvIf Request_URI ^sitename1 sitename1
SetEnvIf Request_URI ^sitename2 sitename2
CustomLog sitename1.log common env=sitename1
CustomLog sitename2.log common env=sitename2
6 apr. 2012 04:05:04
Comentarii

Cum am spus, asta am făcut înainte să trec la WordPress. Acum nu va funcționa deoarece site-urile din wpmu nu există în foldere pe disc sau ca gazde virtuale în Apache: blah.com/blogs/foo, blah.com/blogs/bar.

Synetech Synetech
6 apr. 2012 04:08:18

Am adăugat un exemplu pentru subdirectoare. Netestat, doar o idee.

fuxia fuxia
6 apr. 2012 04:16:06

Hmm, înțeleg ce faci. O să încerc.

Synetech Synetech
6 apr. 2012 04:17:54

@Synetech A funcționat?

fuxia fuxia
6 oct. 2012 22:17:48

Nu, nu a funcționat; jurnalele erau goale. Testez să văd dacă utilizarea directivei <If> poate ajuta, dar necesită actualizarea la versiunea 2.3+.

Synetech Synetech
13 oct. 2012 18:41:48