在我的本地开发服务器上,我设置了像这个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.dev和www.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:
projectName.dev 。 创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都指向同一个地方