我使用Win10, Apache2.4和PHP7.4。我在Apache24htdocs中创建了2个测试站点- Test.com和Test2.com,都包含简单的index.php文件。以下是配置文件中的例外:
主机:
127.0.0.1 Test.com www.Test.com
127.0.0.1 Test2.com www.Test2.com
httpd . conf:
# PHP7 module
PHPIniDir "C:/Dev/PHP-7.4.24"
LoadModule php7_module "C:/Dev/PHP-7.4.24/php7apache2_4.dll"
AddType application/x-httpd-php .php
httpd-vhosts.conf:
<VirtualHost _default_:80>
DocumentRoot "${SRVROOT}/htdocs"
ServerName www.example.com:80
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "${SRVROOT}/htdocs/Test.com"
ServerName Test.com
ServerAlias www.Test.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "${SRVROOT}/htdocs/Test2.com"
ServerName Test2.com
ServerAlias www.Test2.com
</VirtualHost>
加载test.com和test2.com时,浏览器显示htdocs的文件夹索引。只有点击其中一个索引显示实际的站点,浏览器地址字段变成,例如,http://test.com/Test.com/
。如何配置apache显示站点地址如test.com
?
<VirtualHost *:80>
</VirtualHost
嘿,apache,如果你在80端口上收到任何请求,请到test.com文件夹
嘿,apache,如果你在80端口上收到任何请求,去文件夹test2.com
哎!
所以如果我做一个localhost请求http://127.0.0.1:80 apache应该神奇地知道哪个文件夹去正确的?
同时加载
test.com
和test2.com
时,浏览器显示htdocs
的文件夹索引
如果ServerName
(或ServerAlias
)指令与请求的Host
头不匹配,则会发生这种情况。然后它将默认为第一个<VirtualHost>
。
ServerName Test.com ServerAlias www.Test.com
我不一定期望这是大小写敏感的,但是您已经将ServerName
定义为Test.com
(大写T
),但是您请求的是test.com
(全部小写)-浏览器会自动将HTTP请求中的主机名小写,因此您实际上无法请求Test.com
。
您应该将ServerName
定义为全小写。
ServerName test.com
ServerAlias www.test.com
127.0.0.1 Test.com www.Test.com 127.0.0.1 Test2.com www.Test2.com
同样,这也应该是小写的。
仅点击其中一个索引显示实际站点,浏览器地址字段变为,例如
http://test.com/Test.com/
这看起来像你是不正确的链接到/Test.com
子目录,而不是http://test.com
主机?
我试图完全注释掉这个块-没有改变。
在<VirtualHost>
容器之外的主服务器配置中是否有类似的默认?