【问题标题】:Virtual Host Subsites apache 2.4虚拟主机子站点 apache 2.4
【发布时间】:2016-07-11 11:14:00
【问题描述】:

我正在设置 2 个 wordpress 网站。场景是有两个 Wordpress 安装,在文件夹 var/www/domain/us 和 var/www/domain/eu 中。当您从 domain.com 访问站点时,domain.com/us 应该是默认选项 用户通过以下方式访问网站:domain.com/us 或 domain.com/eu

现在虚拟主机的设置是:(我没有附加真实的域名,所以它目前唯一的IP地址)

<VirtualHost *:80>
 ServerName [IP-address]
 ServerAlias [IP-address]
 DocumentRoot /var/www/domain/us
 ErrorLog /var/www/html/domain.com/logs/error.log
 CustomLog /var/www/html/domain.com/logs/access.log combined
</VirtualHost>


<VirtualHost *:80>
 ServerName [IP-address]/us
 DocumentRoot /var/www/domain/us
 ServerAlias [IP-address]
 ErrorLog /var/www/html/domain.com/logs/error.log
 CustomLog /var/www/html/domain.com/logs/access.log combined
</VirtualHost>

<VirtualHost *:80>
 ServerName [IP-address]/eu
 DocumentRoot /var/www/domain/eu
 ServerAlias [IP-address]
 ErrorLog /var/www/html/domain.com/logs/error.log
 CustomLog /var/www/html/domain.com/logs/access.log combined
</VirtualHost>

我可以用主虚拟主机访问IP地址,但是最后两个IP/us和IP/eu给Page not found。

我做错了什么?

【问题讨论】:

    标签: wordpress apache


    【解决方案1】:

    ServerName 将路径解释为主机名的一部分。服务器名称可以包含请求方案、主机名和端口,但不能包含路径。因此只有第一个虚拟主机是有效的。

    由于您使用的是 Apache 2.4,因此您可以使用条件指令来解决问题。在第一个虚拟主机中添加以下内容,然后删除其他两个:

    <VirtualHost *:80>
     ServerName [IP-address]
     ServerAlias [IP-address]
     <If "%{REQUEST_URI} =~ m#^/eu.*$#">
       DocumentRoot /var/www/domain/eu
     </If>
     <Else>
       DocumentRoot /var/www/domain/us
     </Else>
     ErrorLog /var/www/html/domain.com/logs/error.log
     CustomLog /var/www/html/domain.com/logs/access.log combined
    </VirtualHost>
    

    【讨论】:

    • 感谢您的回答。现在,当我重新启动 apache 服务时,它会抛出一个错误:AH00526:/etc/apache2/sites-enabled/domain.com.conf 第 21 行的语法错误:此处不允许 DocumentRoot - 有什么想法吗?
    • 我也在解决这个问题并且得到了完全相同的错误。在纸面上,这似乎是一个完美的解决方案,但我无法理解——Apache 真的会禁止在 语句中设置 DocumentRoot 吗?
    • 实际上,@William Greenly,您在这里的回答是错误的,无法正常工作。 Apache 文档说,只有在“目录”上下文或更高版本中有效的指令才允许在 部分中使用。文档说“只有支持目录上下文的指令才能在 [] 配置部分中使用。” (httpd.apache.org/docs/2.4/mod/core.html#if) 不幸的是,DocumentRoot 指令只允许在“服务器配置”和“虚拟主机”上下文中使用 (httpd.apache.org/docs/2.4/mod/core.html#documentroot)。无赖!
    猜你喜欢
    • 2014-12-28
    • 2014-11-10
    • 2020-11-18
    • 2017-04-16
    • 1970-01-01
    • 2015-04-10
    • 2014-01-06
    • 2014-01-27
    • 2018-01-17
    相关资源
    最近更新 更多