3

我想设置一个虚拟主机,它可以根据用于访问它的主机名动态处理所有请求。如果 %{HTTP_HOST} 可以在 DocumentRoot 中使用,这可能正是我想要的:

<VirtualHost *:80>
    ServerAdmin me@example.com

    DocumentRoot /var/www/live/%{HTTP_HOST}/public
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www/live/%{HTTP_HOST}/public>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

    # Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
    LogLevel warn
    ErrorLog /var/www/live/%{HTTP_HOST}/logs/error.log
    CustomLog /var/www/live/%{HTTP_HOST}/logs/access.log combined
</VirtualHost>

...不幸的是,DocumentRoot ( ) 中不允许使用 %{HTTP_HOST} Warning: DocumentRoot [/var/www/live/%{HTTP_HOST}/public] does not exist。我还能如何实现我的目标?

更新: 我想将一个包罗万象的虚拟主机指向一个目录并让 .htaccess 使用 mod_rewrite 动态选择路径,但(老实说)我已经筋疲力尽了。我会在早上再试一次,但与此同时,如果有人有好主意,我很想听听他们的意见!谢谢!

4

2 回答 2

4

官方实现动态虚拟主机的方法在 Apache 文档中有说明:

http://httpd.apache.org/docs/2.0/vhosts/mass.html

于 2012-02-02T17:17:04.300 回答
4

也许您可以尝试本文中的以下解决方案:Apache:动态虚拟主机

几个月前,每当我想在开发机器上配置一个新站点时,我都在寻找一种解决方案来克服在 Apache 中创建单个虚拟主机的问题(这是我们拥有很多网站的工作中的一个大问题) . Apache 能够使用一个模块和配置文件中的几行相对容易地支持此功能。我在 Fedora 14 上进行了设置,因此其他操作系统的结果可能略有不同(不同的路径、配置文件设置等)

打开主要的 Apache conf (/etc/httpd/conf/httpd.conf),并确保模块 mod_vhost_alias 已启用。配置中应该有一行,例如

LoadModule vhost_alias_module modules/mod_vhost_alias.so 

接下来,将以下行添加到该文件的底部。您需要使用 sudo 权限编辑该文件。

NameVirtualHost *:80

UseCanonicalName Off

<VirtualHost *:80>
    VirtualDocumentRoot /var/www/html/domains/%0 
</VirtualHost>

这为通过端口 80(http 流量的默认端口,如果您使用 https,则需要使用 443 - 或者您可以删除端口限制)的任何域设置了一个全部捕获。这里重要的一行是 VirtualDocumentRoot。告诉 Apache 您的文件将驻留在磁盘上的哪个位置。%0 部分采用整个域名并将其插入到路径中。为了说明这一点,如果我们访问域testing.com.dev,VirtualDocumentRoot 将是:

/var/www/html/domains/testing.com.dev 

这种类型的配置可能适用于大多数情况,但是我不想在磁盘上的文件夹中包含域的 .dev 部分。我可以通过将 VirtualDocumentRoot 设置为:

VirtualDocumentRoot /var/www/html/domains/%-2+ 

The above example of testing.com.dev would now point to:

/var/www/html/domains/testing.com 

Remember to add the domain to your hosts file (/etc/hosts)

For a full list of options see the mod_vhost_alias documentation. Additional documentation can be found here.

于 2012-07-17T20:57:56.733 回答