Apache2 WAMP的可用站点(apache)和httpd.conf-使XXXXX.domain.com自动直接

Apache2 WAMP的可用站点(apache)和httpd.conf-使XXXXX.domain.com自动直接,apache2,wamp,wampserver,apache-config,httpd.conf,Apache2,Wamp,Wampserver,Apache Config,Httpd.conf,我目前在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> NameVirtualHost 127.0.0.1 ServerAlias*.dev.c

我目前在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>
NameVirtualHost 127.0.0.1
ServerAlias*.dev.co.uk
UseCononicalName关闭
VirtualDocumentRoot D:/wamp/www/%1/httpdocs
我创建了一个目录“foo.bar”,然后尝试,我得到了以下结果:

找不到

在上找不到请求的URL/ 这台服务器


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

我从未使用过
VirtualDocumentRoot
,但是看到你没有得到任何回复,我会尝试一下

根据,您的问题似乎在于您使用的
%1
,它将只匹配
的“foo”http://foo.bar.dev.co.uk

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

%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”形式的域
然后,您可以在处理其他域之前处理前面的VirtualHost块的“foo”和“bar”

<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>

ServerAlias foo.dev.co.uk
ServerAlias bar.dev.co.uk
UseCononicalName关闭
VirtualDocumentRoot D:/wamp/www/%1/httpdocs
ServerAlias*.dev.co.uk
UseCononicalName关闭
VirtualDocumentRoot D:/wamp/www/%1.0.%2.0/httpdocs

一些可能支持以下内容的注释:

1) 解析您的本地主机ip
您必须让浏览器能够找到127.0.0.1上的内容。因此,如果未完成,请首先在Windows操作系统计算机C:\Windows\System32\drivers\etc\hosts上编辑主机文件:

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

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

3) 控制:
在使用NameVirtualHost XXX.XXX.XXX.XXX指令时,请确保与NameVirtualHost指令完全匹配。你的帖子上似乎就是这样

4) 路径:
作为Linux用户,这可能是我这边的一句愚蠢的话,但我认为Windows操作系统要求路径使用反斜杠,而不是斜杠。但我可能完全错了,我不想误导任何人。但是由于“这个目录名插入模块中的所有指令都将字符串插入到路径名中,我将检查得到的插入字符串的结果。请看下一点

5) 占位符:
确保模块vhost别名已加载到wamp中。 我还建议您在vhost中添加一个指令,以便您可以在日志中检查所需的插入URL,找出错误,并相应地更正apache设置:

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common 
6) 现有解决方案…
存在的问题总是存在解决方案:请参阅


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

这确实使foo.bar.dev.co.uk无法工作,但不幸的是,它阻止了foo.dev.co.uk的工作,有什么想法吗?最初的错误是:文件不存在:D:/wamp/www/foo新的错误是:文件不存在:D:/wamp/www/foo.devI让它通过给你50%作为回报,您帮助我找到了一个潜在的解决方案,然而,真正的解决方案是在httpd.conf中使用mod_rewrite,我想,我还没有完全完成这项工作,如果您知道一种方法,那么我非常乐意将您的答复作为最终答案。@udjamaflip除非我误解了您的要求,否则我不知道如何
mod_rewrite
有助于简化解决方案。您的标题中提到“重定向”,但问题主体谈到将主机名映射到文档根。如果你能提供更多关于你想要达到的目标的细节,我会尽力帮助你。顺便说一句,如果你把这篇文章贴在网站上,或者甚至贴在网站上,你可能会得到更多的回复。我试着让你的问题迁移,但由于你的悬赏,我没能迁移。我冒昧地回答,只是因为你在将近两周后没有得到任何回应。
127.0.0.1 foo.bar.dev.co.uk
Listen 80
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common