首页 文章

使用mod_vhost_alias的Apache虚拟主机

提问于
浏览
0

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

为此,我在sites-available文件夹中的 000-default.conf 文件中设置了以下内容 .

UseCanonicalName Off VirtualDocumentRoot / var / www / example /%2

这很有效 .

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

<VirtualHost *:80> ServerName sub1.example.com VirtualDocumentRoot /var/www/sub1.example.com </ VirtualHost>

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

有人可以告诉我我做错了什么吗?

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

<VirtualHost *:80> ServerName sub1.example.com VirtualDocumentRoot /var/www/sub1.example.com </ VirtualHost> <VirtualHost *:80> ServerName sub2.example.com VirtualDocumentRoot /var/www/sub2.example . com </ VirtualHost> <VirtualHost *:80> ServerName sub3.example.com VirtualDocumentRoot /var/www/sub3.example.com </ VirtualHost> UseCanonicalName Off VirtualDocumentRoot / var / www / example /%2

2 回答

  • 1

    不要将 VirtualDocumentRoot 用于简单的虚拟主机,仅使用 DocumentRoot .

    VirtualDocumentRoot 定义了mass-virtualhost catch-all,根据定义,你只能有一个mass-virtualhost(否则apache怎么知道给定主机名应该匹配哪个VH) .

    Edit:

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

  • 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

相关问题