配置ApacheHTTPD以将子域映射到子目录

配置ApacheHTTPD以将子域映射到子目录,apache,subdomain,Apache,Subdomain,我正在创建几个子域,每次我都需要为每个子域创建一个Apache配置文件。是否可以使用单个配置配置Apache httpd,使每个子文件夹对应一个子域?像 subdomain1.example.com -> /var/www/example.com/subdomain1/ subdomain2.example.com -> /var/www/example.com/subdomain2/ whatever.example.com -> /var/www/example.com/w

我正在创建几个子域,每次我都需要为每个子域创建一个Apache配置文件。是否可以使用单个配置配置Apache httpd,使每个子文件夹对应一个子域?像

subdomain1.example.com -> /var/www/example.com/subdomain1/
subdomain2.example.com -> /var/www/example.com/subdomain2/
whatever.example.com -> /var/www/example.com/whatever/
换句话说,每当我创建一个新文件夹,我的域名就会有一个新的子域

虚拟主机由两条信息定义:其IP地址和HTTP请求中的host:header的内容。动态海量虚拟主机技术基于自动将此信息插入用于满足请求的文件的路径名。使用mod_vhost_别名最容易做到这一点,但如果您使用的Apache版本高达1.3.6,则必须使用mod_rewrite。默认情况下,这两个模块都被禁用;如果要使用此技术,在配置和构建Apache时必须启用其中一个

为了使动态虚拟主机看起来像一个普通主机,需要“伪造”一些东西。最重要的是服务器名,Apache使用该名称生成自引用URL等。它使用ServerName指令进行配置,CGIs可以通过server_name环境变量使用该名称。运行时使用的实际值由UseCononicalName设置控制。禁用UseCononicalName时,服务器名称来自请求中Host:头的内容。使用UseCononicalName DNS,它来自虚拟主机IP地址的反向DNS查找。前者用于基于名称的动态虚拟主机,后者用于基于IP的主机。如果Apache无法计算出服务器名称,因为没有主机:头或DNS查找失败,那么将使用使用ServerName配置的值

“fake”的另一个对象是文档根(用DocumentRoot配置,CGI可以通过document\u root环境变量使用)。在正常配置中,核心模块在将URI映射到文件名时使用此设置,但当服务器配置为执行动态虚拟主机托管时,该作业将由另一个具有不同映射方式的模块(mod_vhost_别名或mod_重写)接管。这两个模块都不负责设置DOCUMENT_ROOT环境变量,因此,如果任何CGI或SSI文档使用它,它们将获得误导性的值

尝试:


请参见

请参见我将在进一步研究后正确完成我的答案。但是,现在,这可能对你有帮助。
# get the server name from the Host: header
UseCanonicalName Off

# this log format can be split per-virtual-host based on the first field
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon

# include the server name in the filenames used to satisfy requests
VirtualDocumentRoot /path/to/default/folder/%0
VirtualScriptAlias /www/hosts/%0