【问题标题】:Apache Virtual Host using mod_vhost_alias使用 mod_vhost_alias 的 Apache 虚拟主机
【发布时间】:2014-05-28 00:51:13
【问题描述】:

我正在尝试设置我的 apache 模块以动态地将所有请求定向到特定文件夹,然后将名称与同名文件夹匹配。

为此,我在站点可用文件夹中的 000-default.conf 文件中设置了以下内容。

UseCanonicalName 关闭
VirtualDocumentRoot /var/www/example/%2

这很好用。

然后我想设置几个不同的域不指向示例文件夹,而是指向其他地方,所以我在 VirtualDocumentRoot 行之前添加了几个:


服务器名称 sub1.example.com
VirtualDocumentRoot /var/www/sub1.example.com
虚拟主机>

但是,现在动态指向不再起作用,所有 URL 都被重定向到第一个 -> VirtualDocumentRoot 位置。

谁能告诉我我做错了什么?

apache2/sites-available/000-default.conf中的完整代码示例:


服务器名称 sub1.example.com
VirtualDocumentRoot /var/www/sub1.example.com
虚拟主机>


服务器名称 sub2.example.com
VirtualDocumentRoot /var/www/sub2.example.com
虚拟主机>


服务器名称 sub3.example.com
VirtualDocumentRoot /var/www/sub3.example.com
虚拟主机>

UseCanonicalName 关闭
VirtualDocumentRoot /var/www/example/%2

【问题讨论】:

    标签: apache ubuntu hosting virtual mod-vhost-alias


    【解决方案1】:

    对于简单的虚拟主机不要使用VirtualDocumentRoot,只使用DocumentRoot

    VirtualDocumentRoot 定义了 mass-virtualhost 包罗万象,根据定义,您只能拥有一个 mass-virtualhost(否则 apache 怎么知道给定主机名应该匹配哪个 VH)。

    编辑:

    现在您需要进行一些其他更改: - 确保您在 apache 配置中的某处有 NameVirtualHost *:80(除非您使用 Apache 2.4)。 - 将 Mass-Virtualhost 移动为 first,使其成为 默认 虚拟主机。当请求主机名与任何ServerName 指令不匹配时,使用默认虚拟主机。 (您可以通过使用 -S 选项运行 apache 来检查默认 VH)。

    【讨论】:

    • 我使用了 VirtualDocumentRoot,因为它在 Apache 网站上的一个示例中就是这样使用的。但是,我尝试了您的解决方案,但并没有改变结果。
    • 好的,我设法解决了这个问题,你的建议实际上是让它工作的一部分。谢谢你。我赞成您的回答,但也发布了解决问题的详细说明
    【解决方案2】:

    我已经想出了如何做到这一点,并决定在这里为其他遇到类似问题的人发布解决方案:

    所以设置 apache2,使用 mod_vhost_alias 让所有域指向同名的通用文件夹,但特定域指向其他地方,这就是你需要做的。

    在您的 000-default.conf 站点配置文件中,编写以下代码:

    UseCanonicalName Off
    

    然后为您要指向特定文件夹的每个特定域添加以下块,将 example.com 替换为您的域名:

    <VirtualHost *:80>
     ServerName example.com
     ServerAlias www.*
     DocumentRoot path/to/your/folder
    </VirtualHost>
    

    然后添加下一个块以将所有其他通用域指向通用文件夹:

    <VirtualHost *:80>
     ServerName vhosts.fqdn
     ServerAlias www.*
     VirtualDocumentRoot path/to/your/folder/%2+
    </VirtualHost>
    
    <VirtualHost *:80>
     ServerName vhosts.fqdn
     ServerAlias *
     VirtualDocumentRoot path/to/your/folder/%1+
    </VirtualHost>
    

    第一个块将指向所有域,从 www 开始。到与 www 后的名称匹配的文件夹。 第二个块是指向相同的域,当没有 www。被指定,到同一个文件夹。

    有关在文档根目录中使用的动态海量虚拟主机选项的更多信息,请访问:http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html

    【讨论】:

      猜你喜欢
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2014-04-09
      • 1970-01-01
      • 2019-08-25
      • 2012-04-26
      相关资源
      最近更新 更多