将www子域添加到我的通配符虚拟主机

在我的本地开发服务器上,我设置了像这个projectName.dev这样的域的testing站点

在我的Apacheconfiguration文件中使用下面的设置…

NameVirtualHost *:80 <VirtualHost *:80> VirtualDocumentRoot E:/Server/htdocs/projects/%1/www ServerAlias *.dev </VirtualHost> 

这允许我在浏览器中访问projectName.dev ,它将从E:/Server/htdocs/projects/projectName/www/

我想修改这个,这样我也可以访问相同的文件夹,如果我使用子域名www所以在我的例子projectName.devwww.projectName.dev将加载相同的文件。

有人可以帮我做这个吗? 我不太了解这个文档

你可以尝试以下

 NameVirtualHost *:80 <VirtualHost *:80> VirtualDocumentRoot E:/Server/htdocs/projects/%-2/www ServerName staging.dev ServerAlias *.dev www.*.dev </VirtualHost> 

您可以使用%-2来始终获取“项目”名称。 %-2从最后给你的url的第二部分。 例如,如果url是http://project1.dev/,那么docroot就是E:/ Server / htdocs / projects / project1 / www

ALex_hha回复是正确的,问题是VirtualDocumentRoot中的%1。 这被所使用的主机名取代。 使用多个通配符变体和VirtualDocumentRoot总是很棘手。

你有两个解决scheme:

  1. replace%1我的一个硬编码的projectName.dev
    如果你有很多项目,你将需要为每个项目创build一个虚拟主机configuration,但只有一个是一个很好的解决方法。
  2. 创build2个configuration:

     # www.project.dev format <VirtualHost *:80> VirtualDocumentRoot E:/Server/htdocs/projects/%2+/www ServerName www.*.dev </VirtualHost> # project.dev format <VirtualHost *:80> VirtualDocumentRoot E:/Server/htdocs/projects/%1/www ServerName *.dev </VirtualHost> 

%2 +表示您希望收到主机名的第二个和前面部分。 检查mod_vhost帮助页面以获取更多信息

你没有使用unix,但是在unix上,你也可以做一个从www名字到项目名字的符号链接:

 cd /srv/ for i in *; do # bypass if not a directory if [ ! -d "$i" ]; then continue; fi # bypass if already created if [ -e "www.$i" ]; then continue ; fi # bypass if already a www echo $i | fgrep -q "www" && continue ln -s $i www.$i done 

这样projectname和www.projectname都指向同一个地方