用于 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/httpdocs
和D:/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 自动定向的主要内容,如果未能解决你的问题,请参考以下文章