在我的本地主机(Apache 服务器)中,我有两个VirtualHost
端口 80 指向不同的目录。
这是我的两个conf文件:
<VirtualHost *:80>
ServerName localhost
DocumentRoot /home/myuser/project_1/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName project2
DocumentRoot /home/myuser/project_2/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
在我的/etc/hosts
文件中:
127.0.0.1 localhost
127.0.1.2 project2
现在,当我键入时,http://localhost
它映射到project_1
目录,并且http://project2/
它映射到project_2
目录。这里一切都很好,但如果我输入127.0.1.2
它总是映射到第一个project_1
而不是project_2
目录,即它映射到localhost
而不是project2
url。
为什么是这样?我怎样才能做这样的反向映射?
答案1
在虚拟主机配置中,您将使用指定的基于名称的虚拟主机ServerName
。这意味着仅当客户端请求中的“Host”标头匹配时才会加载配置。当 Apache 无法将请求的主机与任何配置的虚拟主机相匹配时,Apache 的默认行为是加载它可以找到的第一个配置的虚拟主机。
有很多选项可以获取正确的内容,其中之一是调整请求中的“主机”标头以匹配ServerName
您尝试访问的内容。另一种方法是将 IP 地址添加为 a,ServerAlias
或者您可以切换到基于 IP 的虚拟主机并以这种方式进行配置。