用于 WAMP 的站点可用(apache)和 httpd.conf - 使 XXXXX.domain.com 自动定向

Posted

技术标签:

【中文标题】用于 WAMP 的站点可用(apache)和 httpd.conf - 使 XXXXX.domain.com 自动定向【英文标题】:sites-available (apache) and httpd.conf for WAMP - making XXXXX.domain.com automatically direct 【发布时间】:2011-09-08 10:29:39 【问题描述】:

我目前在 WAMP 的 httpd.conf 文件中有这个:

NameVirtualHost 127.0.0.1

<VirtualHost 127.0.0.1>
    ServerAlias *.dev.co.uk
    UseCanonicalName Off
    VirtualDocumentRoot D:/wamp/www/%1/httpdocs
</VirtualHost>

我创建了一个目录“foo.bar”,然后尝试http://foo.bar.dev.co.uk,我得到了这个:

找不到

请求的 URL / 未在 这个服务器。

我想让这个设置在我的本地 apache 服务器和我的 wamp 服务器上工作(我认为语法略有不同)。如果我需要提供更多信息,请发表评论,我会更新。

【问题讨论】:

顺便说一句,如果您在webmasters.stackexchange.com 甚至serverfault.com 上发布此内容,您可能会收到更多回复。我尝试迁移您的问题,但由于您提供的赏金而无法迁移。我冒险回答只是因为您在将近 2 周后没有收到任何回复。 【参考方案1】:

我从未使用过VirtualDocumentRoot,但看到您没有收到任何回复,我会试一试。

根据docs on Directory Name Interpolation,您的问题似乎在于您使用%1,它只会匹配http://foo.bar.dev.co.uk 的“foo”。

要匹配“foo.bar”,请尝试:

VirtualDocumentRoot D:/wamp/www/%1.0.%2.0/httpdocs

%1 匹配“foo”,而%2 匹配“bar”。附加到每种格式的.0 是为了允许我们在 foo 和 bar 之间包含点(因为. 也用作提取匹配单词的子字符串的运算符)。

如果这不起作用,请检查日志以查看 Apache 实际查找的目录。这可能会提供关于哪里出了问题的提示。

更新

回应:

“这确实使 foo.bar.dev.co.uk 然而,不幸的是它停止了 foo.dev.co.uk 工作,有什么想法吗?”

使用目录名称插值来匹配具有不确定数量的子域的别名是很棘手的。

最直接的方法是简单地使用%0 并以完整域名命名目录。

VirtualDocumentRoot D:/wamp/www/%0/httpdocs

这将与目录D:/wamp/www/foo.bar.dev.co.uk/httpdocsD:/wamp/www/foo.dev.co.uk/httpdocs 匹配。

如果您只有有限的可能域子集,则可以制定更具体的解决方案。例如,如果您有:

“foo.dev.co.uk” “bar.dev.co.uk” “foo.bar.dev.co.uk” .. 以及“X.Y.dev.co.uk”形式的更多域

然后您可以在处理其他域之前处理“foo”和“bar”前面的 VirtualHost 块。

<VirtualHost 127.0.0.1>
    ServerAlias foo.dev.co.uk 
    ServerAlias bar.dev.co.uk
    UseCanonicalName Off
    VirtualDocumentRoot D:/wamp/www/%1/httpdocs
</VirtualHost>

<VirtualHost 127.0.0.1>
    ServerAlias *.dev.co.uk
    UseCanonicalName Off
    VirtualDocumentRoot D:/wamp/www/%1.0.%2.0/httpdocs
</VirtualHost>

【讨论】:

这确实使 foo.bar.dev.co.uk 但是,不幸的是它阻止了 foo.dev.co.uk 的工作,有什么想法吗?原来的错误是:文件不存在:D:/wamp/www/foo 新的错误是:文件不存在:D:/wamp/www/foo.dev 我已经让它通过,给你 50% 的奖励,因为你帮助我找到了一个潜在的解决方案,但是,我认为真正的解决方案是在 httpd.conf 中使用 mod_rewrite,我还没有最终确定,如果您知道方法,那么我很乐意将您的回复作为最终答案。 @udjamaflip 除非我误解了您的要求,否则我看不出mod_rewrite 如何帮助简化解决方案。您的标题提到了“重定向”,但问题正文谈到了将主机名映射到文档根。如果你能提供更多关于你正在努力实现的细节,我会尽力提供帮助。【参考方案2】:

一些可能支持的 cmets:

1) 解析你的 localhost ip 您必须让您的浏览器能够找到 127.0.0.1 上的内容。所以,如果没有完成,首先在你的 Windows 操作系统机器上编辑 hosts 文件C:\Windows\System32\drivers\etc\hosts

127.0.0.1 foo.bar.dev.co.uk

前提是不可能在该主机文件中使用通配符。为此,您应安装this。

2) 端口: 确保您的服务器正在侦听 http 默认端口,例如不要忘记在您的 httpd.conf 文件中添加此指令(因为我没有看到它):

Listen 80

3) 控制: 当您使用 NameVirtualHost XXX.XXX.XXX.XXX 指令时,请确保它与 NameVirtualHost 指令完全匹配。您的帖子中似乎就是这种情况。

4) 路径: 作为 Linux 用户,从我这方面来说,这可能是一个愚蠢的评论,但我认为 Windows 操作系统需要反斜杠作为路径,而不是斜杠。但我可能肯定错了,不想误导任何人。但是由于“这个 Directory Name Interpolation 模块中的所有指令都将字符串插入到路径名中,所以我会检查所获得的插入字符串的结果。请看下一点。

5) 占位符: 确保将模块 vhost alias 加载到您的 wamp 中。 我还建议您在虚拟主机中添加一个指令,以便您可以在日志中检查所需的插值 URL 是什么,找出问题所在,并相应地更正您的 apache 设置:

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common 

6) 现有解决方案... 存在的问题总是存在的解决方案:见there

一旦您检查了这些要点,我想解决方案很快就会出现。

【讨论】:

以上是关于用于 WAMP 的站点可用(apache)和 httpd.conf - 使 XXXXX.domain.com 自动定向的主要内容,如果未能解决你的问题,请参考以下文章

启用对 WAMP 服务器上站点的本地网络访问

如何在windows/wamp环境下在本机配置站点

wamp配置多站点步骤

wamp Server 多站点配置

wamp多站点访问设置

WAMPSERVER多站点配置