【问题标题】:XAMPP with virtualhost is serving the wrong documentroot带有虚拟主机的 XAMPP 提供了错误的文档根目录
【发布时间】:2021-12-31 04:16:42
【问题描述】:

我在 Linux 上运行 xampp,想设置虚拟主机,以便在项目之间快速跳转。

我有两个这样的项目:

/home/(user)/webdev/app1 包含一个index.html

/home/(user)/webdev/app2 包含一个index.html

我的httpd.conf 包括这些sn-ps:

<Directory "/home/(user)/webdev/app1">
    Options Indexes FollowSymLinks ExecCGI Includes
    AllowOverride All
    Require all granted
</Directory>

<Directory "/home/(user)/webdev/app2">
    Options Indexes FollowSymLinks ExecCGI Includes
    AllowOverride All
    Require all granted
</Directory>

并且Include etc/extra/httpd-vhosts.conf 未注释。

我的httpd-vhosts.conf 包括:

<VirtualHost *:80>
    ServerAdmin webmaster@webdev.app1
    DocumentRoot "/home/(user)/webdev/app1"
    ServerName webdev.app1
    ErrorLog "logs/app1.example.com-error_log"
    CustomLog "logs/app1.example.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@webdev.app2
    DocumentRoot "/home/(user)/webdev/app2"
    ServerName webdev.app2
    ErrorLog "logs/app2.example.com-error_log"
    CustomLog "logs/app2.example.com-access_log" common
</VirtualHost>

我的/etc/hosts 文件如下所示:

127.0.0.1   localhost
::1     localhost

127.0.0.1   webdev.app1
127.0.0.1   webdev.app2

据我了解,我做的一切都是正确的。不幸的是,当我转到webev.app1webdev.app2 时,它会提供常规的htdocs 文件夹,而不是修改后的DocumentRoot。当我转到localhost 时,它会提供httpd-vhost.conf 中的第一个名称,在本例中为/home/(user)/webdev/app1

我期望的行为是在我访问 webdev.app1 时提供 app1,而在我访问 webdev.app2 时提供 app2。我错过了什么?

【问题讨论】:

  • 你有没有配置其他&lt;VirtualHost&gt; 块? Apache 将尝试将请求的域与每个&lt;VirtualHost&gt; 匹配。如果没有匹配,它将使用从 conf 文件中读取的第一个 &lt;VirtualHost&gt; 块。
  • @Nic3500 不,这是文件中仅有的两个块。
  • 试试这个:apachectl -t -D DUMP_VHOSTS。它将向您展示 VirtualHosts 的知识。此外,注释掉您的 VirtualHosts 之外的任何 DocumentRoot 指令。
  • @Nic3500 apachectl -t -D DUMP_VHOSTS 给出了这个:*:80 pop-os.localdomain (/etc/apache2/sites-enabled/000-default.conf:1) 看起来它不知道我的虚拟主机。我尝试在 httpd.conf 中评论 DocumentRoot 指令,但没有帮助。同样的行为。
  • @Nic3500 另外,当我运行 systemctl 时,即使 xampp / lampp 正在运行,apache2 也根本不在列表中。也许这与它有关?

标签: php apache xampp virtualhost


【解决方案1】:

您的虚拟主机设置不正确,您告诉 Apache 如果有任何请求进入端口 80,则服务 app1,同时如果有任何请求进入端口 80,则服务 app2。使用以下示例之一修复它:

----------START DIFFERENTIATE VIA DIFFERENT DOMAINS----------------
 
    Listen 80
    
    <VirtualHost *:80>
        DocumentRoot "/www/app1"
        ServerName www.app1.com
        ServerAlias *.app1.com
    
        # Other directives here
    </VirtualHost>
    
    <VirtualHost *:80>
        DocumentRoot "/www/app2"
        ServerName www.app2.com
        ServerAlias *.app2.com
    
        # Other directives here
    </VirtualHost>

----------END DIFFERENTIATE VIA DIFFERENT DOMAINS----------------


----------START DIFFERENTIATE VIA SUB FOLDERS----------------

    Listen 80

    <VirtualHost *:80>
        DocumentRoot "/www/apps"
        
    
        # in the 'apps' folder place subfolders 'app1' and 'app2'
        # navigate in the browser to each app i.e. 127.0.0.1/apps/app1 and 127.0.0.1/apps/app2
        # Other directives here
    </VirtualHost>

----------END DIFFERENTIATE VIA SUB FOLDERS----------------



----------START DIFFERENTIATE VIA DIFFERENT PORTS----------------

    Listen 81
    Listen 82
    
    <VirtualHost *:81>
        DocumentRoot "/www/app1"
    
        # Other directives here
    </VirtualHost>
    
    <VirtualHost *:82>
        DocumentRoot "/www/app2"
    
        # Other directives here
    </VirtualHost>
    

----------END DIFFERENTIATE VIA DIFFERENT PORTS----------------

【讨论】:

  • 我不是做了第一个吗?我只是没有添加 ServerAlias 指令。我现在添加了它,但它没有帮助。
  • 不,你没有做第一个,因为你指定了一个无效的 ServerName,webdev.app1 不是有效的域
  • 我明白了,谢谢。现在我在 ServerName 的末尾添加了一个 .com,它现在可以工作了。我不知道域名有规则。再次感谢!
猜你喜欢
  • 2019-06-29
  • 2014-06-09
  • 2015-09-05
  • 2018-11-10
  • 1970-01-01
  • 2018-08-14
  • 2021-02-08
  • 2013-01-29
  • 2019-08-12
相关资源
最近更新 更多