带有虚拟主机的 404 和带有 Apache (httpd) 的子目录

Posted

技术标签:

【中文标题】带有虚拟主机的 404 和带有 Apache (httpd) 的子目录【英文标题】:404 with VirtualHost and Subdirectories with Apache (httpd) 【发布时间】:2012-04-29 22:08:35 【问题描述】:

注意:显然我的虚拟主机条目中的 ServerName 存在冲突,我需要对我的 /etc/hosts 文件进行一些更改。对此进行调查,但任何见解都值得赞赏。谢谢

========================================

(请注意,我将 http:// 替换为 hxxp:// 以允许 *** 让我发布此内容)

我有一个服务器,10.1.1.1,我将在子目录中托管多个 WordPress 安装。服务器规格:

操作系统:RHEL 6.2 圣地亚哥 Apache版本:Apache/2.2.15 (Unix) php版本:5.3.9 mysql 5.5.20 版

我想从虚拟目录site_one(即hxxp://10.1.1.1/site_one)运行第一个WordPress安装——这个站点的代码是驻留在/var/www/sites/site_one

我想从虚拟目录site_two(即hxxp://10.1.1.1/site_two)运行第二个WordPress安装——这个站点的代码是驻留在/var/www/sites/site_two

我还在 /var/www/sites 中删除了一个虚拟的 hello world index.html 文件

--

我对我的 httpd.conf 进行了以下更改:

    整个站点的 DocumentRoot 设置为 /var/www/sites 即:

    DocumentRoot "/var/www/sites"

    在 httpd.conf 的最底部,我有以下 VirtualHost 指令(我将 替换为 [ ] 因为我无法让堆栈溢出以输出 :

    名称虚拟主机 *:80 [虚拟主机 *:80] 服务器名称 10.1.1.1 DocumentRoot /var/www/sites/site_one 别名 /site_one /var/www/sites/site_one/ [/虚拟主机] [虚拟主机 *:80] 服务器名称 10.1.1.1 DocumentRoot /var/www/sites/site_two 别名 /site_two /var/www/sites/site_two/ [/虚拟主机]

    我检查了httpd的语法(httpd -t),语法没问题 我重启httpd

--

如果我尝试访问 hxxp://10.1.1.1/site_two 它会给我一个 404 并且 error_log 报告它正在 /var/www/sites/sites_one/site_two/ 中查找文件...显然我希望它不看那里,而是看 /var/www/sites/site_two/ ...我做错了什么?感谢您的任何帮助!

【问题讨论】:

您是否尝试过在/etc/httpd/conf.d/ 中为每个您想要的vhost 创建一个vhost .conf 文件,而不是编辑主httpd.conf 我觉得这两个对80端口的引用有冲突... 【参考方案1】:

请参阅 Apache 文档。 http://httpd.apache.org/docs/2.2/vhosts/name-based.html

您正在尝试使用基于名称的虚拟主机,因为您只有一个 IP 地址。这很好,但你错过了它如何工作的 DNS 部分。从文档中:“您只需配置 DNS 服务器以将每个主机名映射到正确的 IP 地址,然后配置 Apache HTTP 服务器以识别不同的主机名。”

第一个列出的虚拟主机始终是默认主机。这就是为什么您的 site_one 将按照您“认为”的方式行事,但是当您尝试访问 site_two 时,它属于默认虚拟主机。 您对虚拟主机的工作方式有错误的想法。您尝试做的事情可以使用别名来完成,但是如果您在代码中的任何地方引用文档根目录,则必须跟进您所指的站点。

例如在 PHP 代码中是这样的:

require($_SERVER['DOCUMENT_ROOT']."/site_one/directory/to/wherever

【讨论】:

以上是关于带有虚拟主机的 404 和带有 Apache (httpd) 的子目录的主要内容,如果未能解决你的问题,请参考以下文章

Apache - 404 未找到

如何使用 apache 403 错误作为带有 h​​taccess 的路由技术

网站返回带有内容的错误 404

Apache2 使用 Django 项目设置带有子域的虚拟主机

带有 Auth0 路由错误 404 的 Angular 2

带有代理和排除的 html5 pushstate 的 Apache 重写规则