好吧,我有麻烦了......而且情况越来越糟!
我在 Windows 7 上运行 XAMPP。我在 localhost 上为不同的 Web 项目定义了大量子域;例如 xyz.localhost、abc.localhost 等。它们运行良好。我分两步添加每个子域:
httpd-vhosts.conf
我添加了一个如下所示的部分:<VirtualHost *> DocumentRoot "path/to/xampp/htdocs/xyz" ServerName xyz.localhost </VirtualHost>
我在我的 hosts 文件 (C:\Windows\System32\drivers\etc\hosts) 中添加了一个如下所示的条目:
127.0.0.1 xyz.localhost
然后我重新启动 Apache。Bam。这一直有效,我不必了解这些文件的深层内部工作原理。
今天打开电脑,发现我的所有 localhost 子域名突然都无法使用了。Chrome 和 Firefox 都说找不到它们。但是,我仍然可以访问http://localhost
,也可以使用 访问子域名文件夹http://127.0.0.1/xyz
。
经过一番挖掘,我在错误日志中发现了这个神秘的错误:
VirtualHost _default_:443 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
因此我搜索了文件,发现其中httpd-ssl.conf
有一个以 开头的部分<VirtualHost _default_:443>
。但是,该文件多年来一直没有被修改过,所以这可能不是问题所在。
我尝试更改我的httpd-vhosts.conf
文件:
- 从
NameVirtualHost *
到NameVirtualHost *:80
,以及 <VirtualHost *>
到<VirtualHost *:80>
但那没有用。
所以我随机想到,也许我应该在 中添加一个Listen 443
。httpd.conf
这会导致 Apache 无法再启动,所以我将其删除了。
发生了什么事??什么可能发生变化?我应该赶紧补充一点,我甚至不知道端口 443 与 XAMPP 有什么关系。我从未使用 SSL 访问过任何本地站点,而且我不需要它。有人能帮助我吗?我正在黑暗中摸索。
答案1
对于那些不想在这个帖子中浪费时间的人,让我总结一下这个问题及其解决方案。:)
我突然无法访问使用 XAMPP 在 localhost 上创建的任何子域。我知道它们设置正确,因为它们在出现问题之前已经运行了很长时间。
问题最终出在我的 hosts 文件 (C:\Windows\System32\drivers\etc\hosts) 上。此文件用于手动输入 IP 地址/主机名对,绕过 DNS 服务器,在将子域添加到 localhost 时必须对其进行编辑(请参阅我的问题以了解如何执行此操作)。hosts 文件对格式的要求非常严格,我意识到该文件中的行尾已从CRLF
(标准 Windows) 更改为CRCR
。我注意到文件出现了双倍行距,但直到我查看十六进制并发现到处都是,我才发现原因0d0d
。我能够在 Sublime Text 中修复行尾,一切又恢复正常。
我怀疑该文件被 Cisco AnyConnect 安全移动客户端破坏了。这是我最近安装的用于访问客户端 VPN 的 Cisco AnyConnect VPN 客户端的最新版本。我注意到我的主机文件中有一行新内容指定了该 VPN 的 IP,我认为当 Cisco 应用程序添加该行时,它破坏了整个文件的行尾。这是我的理论。
谢谢韦恩帮助我们解决问题。
答案2
根据我上面的评论。
- 下载 xampp v1.8.3-3 并安装到 C:\XAMPP
- 在 C:\XAMPP\htdocs\xampp 中创建了 3 个文件夹 (site1、site2、site3)。
- 在所有三个文件夹中创建虚拟 index.htm 文件,仅包含网站标题
- 编辑 C:\XAMPP\Apache\conf\extra\httpd-vhosts.conf 并使其如此
名称虚拟主机 *:80
<VirtualHost *:80>
DocumentRoot “C:/xampp/htdocs/xampp”
服务器名称 localhost
</VirtualHost><VirtualHost *:80>
DocumentRoot“C:/ xampp / htdocs / xampp / site1”
服务器名称 site1.localhost
</VirtualHost><VirtualHost *:80>
DocumentRoot “C:/xampp/htdocs/xampp/site2”
服务器名称 site2.localhost
</VirtualHost><VirtualHost *:80>
DocumentRoot “C:/xampp/htdocs/xampp/site3”
服务器名称 site3.localhost
</VirtualHost>
- 以管理员身份启动命令提示符
- 通过以下方式编辑主机:记事本 c:\windows\system32\drivers\etc\hosts
- 添加了以下几行
127.0.0.1 站点1.localhost
127.0.0.1 站点2.localhost
127.0.0.1 站点3.localhost
- 通过 XAMPP 控制面板启动 apache
- 验证所有 4 个站点正常运行:site1.localhost、site2.localhost、site3.localhost 和普通 localhost(xampp 问候页面)
诊断虚拟主机问题
- 检查 apache 日志文件
- 尝试 ping 站点并确保返回正确的 IP 地址。如果 ping 失败,通常是 DNS/主机文件条目问题
- 使用类似http 监视验证是否已为站点设置 http 标头 Host xxxx.xxxx