Конфигурация My Apache Virtual Hosts в настоящее время имеет несколько повторов этого;
<VirtualHost *:80>
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot /home/example1.com/www
LogLevel warn
ErrorLog /home/example1.com/logs/error.log
CustomLog /home/example1.com/logs/access.log combined
Alias /dev /home/example1.com/dev
ScriptAlias /cgi-bin/ /home/example1.com/cgi-bin
</VirtualHost>
Как можно изменить это так, чтобы все экземпляры example1.com были заменены тем доменом, который пользователь просматривает в данный момент?
я знаю mod_vhost_alias, но я не вижу никаких упоминаний о том, что он также может динамически создавать журналы или псевдонимы (кроме ScriptAlias). Есть ли способ добиться этого? Я бы предпочел не жертвовать для этого отдельными журналами.
Вероятно, вы могли бы решить псевдоним с помощью правила mod_rewrite:
# get the server name from the Host: header
UseCanonicalName Off
# remove www.
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule .? - [E=noWWWHost:%1]
# map /dev to the documentroot for dev
RewriteCond %{REQUEST_URI} !^/~
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^/dev/(.*)$ /home/${lowercase:%{ENV:noWWWHost}}/dev/$1
# not using www
RewriteCond %{REQUEST_URI} !^/~
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^/dev/(.*)$ /home/${lowercase:%{HTTP_HOST}}/dev/$1
# make a log that is "splitable" on host
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
Изменить: забыл добавить, что приведенная выше конфигурация не проверена :)
Ты можешь использовать mod_vhost_alias
и измените формат журнала, добавив %V
(Действующее имя сервера) в начале строки.
Затем вам просто нужно написать простой сценарий оболочки или программу на Perl, которая проанализирует необработанный журнал и запишет его в соответствующий файл журнала. Вы даже можете сделать это в реальном времени с помощью конвейерного журнала: CustomLog "|/path/to/script.pl" combined_vhost
Есть несколько способов сделать это ... вы можете создать виртуальный хост со связанным файлом журнала для каждого хоста. Если вы ищете совпадение с подстановочными знаками, возможно, будет проще проанализировать журналы позже с заданным именем хоста.