带有虚拟主机的 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 403 错误作为带有 htaccess 的路由技术