【问题标题】:Setup Dynamic Virtual Host (Apache2 on Ubuntu)设置动态虚拟主机(Ubuntu 上的 Apache2)
【发布时间】:2012-01-29 06:49:24
【问题描述】:

我想设置一个虚拟主机,它可以根据用于访问它的主机名动态处理所有请求。如果 %{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 (Warning: DocumentRoot [/var/www/live/%{HTTP_HOST}/public] does not exist) 中不允许使用 %{HTTP_HOST}。我还能如何实现我的目标?

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

【问题讨论】:

标签: apache virtualhost apache-config virtual-hosts


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    也许您可以尝试本文中的以下解决方案:Apache: Dynamic Virtual Hosts

    几个月前,我寻找解决方案来克服 每次我想在 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+ 
    

    上面的 testing.com.dev 示例现在指向:

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

    记得将域添加到您的 主机文件(/etc/hosts)

    有关选项的完整列表,请参阅 mod_vhost_alias 文档。 可以在此处找到其他文档。

    【讨论】:

    • 这真的很简单
    • 是的,这是一个很好的直接方法,但是请注意,使用VirtualDocumentRoot 实际上会影响mod_rewrite 规则(在 WordPress、Drupal 和许多 PHP 框架中使用)。它要求您将RewriteBase 规则应用于每个应用程序。我仍在尝试找出解决方法。
    猜你喜欢
    • 2013-06-24
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2014-10-29
    • 2014-10-23
    • 1970-01-01
    相关资源
    最近更新 更多