具有动态日志的虚拟主机中的通配符?

具有动态日志的虚拟主机中的通配符?

我的 Apache 虚拟主机配置目前有几个重复的地方;

<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 除外)。有办法实现这一点吗?我宁愿不为此牺牲单独的日志。

答案1

您也许可以使用 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

编辑:忘记添加上面的配置未经测试:)

答案2

您可以在行首mod_vhost_alias添加(有效服务器名称)来使用和更改日志格式。%V

然后,您只需编写一个简单的 shell 脚本或 perl 程序来解析原始日志并将其写入相关日志文件。您甚至可以使用管道日志实时执行此操作:CustomLog "|/path/to/script.pl" combined_vhost

答案3

有几种方法可以实现这一点...您可以创建一个虚拟主机,并为每个主机创建一个相关的日志文件。如果您正在寻找通配符匹配,那么稍后使用给定的主机名解析日志可能会更容易。

相关内容