我有一个非常低级的问题。我有几个域名,想把它们托管在我已经设置的虚拟服务器上。服务器运行良好,但是我在虚拟托管部分遇到了问题。当我只有一个域名启动并运行时,一切都运行正常,但现在我试图添加其他网站,却遇到了障碍。
当我通过终端登录时出现此信息:
<VirtualHost *:80>
ServerName www.mydomain1.com
DocumentRoot /www/public_html/mydomain1.com/index.php
</virtualHost>
<VirtualHost *:80>
ServerName www.mydomain2.com
DocumentRoot /www/public_html/mydomain2.com/index.php
</virtualHost>
现在我遇到麻烦时尝试修改这些。我现在的问题是,我已经尝试了很多方法来启动和运行,我无法回到一切正常时的最初状态。
答案1
尝试将其放在NameVirtualHost *:80
文件的开头。
index.php
从两条线中删除DocumentRoot
。
然后运行apache2ctl restart
。尝试访问网站,如果出现 404 错误,请将其附加index.php
到浏览器地址栏中的 URL。
答案2
在缺乏更多细节的情况下,我同意 fuscata 的建议(添加 NameVirtualHost 指令并修复损坏的 DocumentRoot 指令)。
为了让您更深入地了解基于名称的虚拟主机设置,下面简要介绍一下它的工作原理。当您将“NameVirtualHost *:80”添加到 Apache 配置时,您就是在告诉 Apache 检查 HTTP 请求中的主机标头,以确定要将哪组配置应用于特定请求。这个想法是,您可以将许多站点绑定到同一个 IP(或多个 IP)。
虚拟主机容器中的 ServerName 指令将定义一组基于主机名的配置,这些配置取决于请求中传递到 Host: 标头的值。例如,对于上面的域 www.mydomain2.com,您可以有类似以下内容:
<VirtualHost *:80>
ServerName www.mydomain2.com
ServerAlias mydomain2.com
DocumentRoot /www/public_html/mydomain2.com/
DirectoryIndex index.php index.html
</virtualHost>
...其中 DocumentRoot 指向表示与站点关联的文档的根级别的目录,ServerAlias 表示表达主机名的替代方式(例如,mydomain2.com,减去“www”)。DirectoryIndex 指令定义应为“/”或无根级别 URI 访问哪些文件 - 例如,http://www.mydomain2.com。
综上所述,如果这是一个面向公众的网站,我强烈建议您花时间了解 Apache 的工作原理,以及如何建立并运行一个合适的配置。从长远来看,这将对您有所帮助,并帮助您避免安全问题和其他问题。