这可能已经被问到,但我找不到直接的答案,或者我发现的不起作用。
我有一个域mydomain.com ,parsing为IP; 我们称之为8.8.8.8。 DNS设置还将两个子域指向具有Alogging的IP地址。 这些是dev.mydomain.com和staging.mydomain.com 。 两者都有一个指向8.8.8.8的Alogging。
在服务器(8.8.8.8)上有两个虚拟主机文件。 这些如下:
staging.mydomain.com.conf
国防部重写子域到文件夹中断到CSS和图像的path
Nginx http到httpsredirect问题
使用Nginx将子域映射到URL
.htaccess重写子目录到目录
如何configurationNginx通过subdomain.domain.tld:80使ssh服务器可用
<VirtualHost *:80> ServerName staging.mydomain.com DocumentRoot /var/www/html/mydomain.com/staging/ </VirtualHost>
和…
dev.mydomain.com.conf
<VirtualHost *:80> ServerName dev.mydomain.com DocumentRoot /var/www/html/mydomain.com/dev/ </VirtualHost>
问题是:
无论我访问http://staging.mydomain.com还是http://dev.mydomain.com ,我总是登陆staging.mydomain.com (Apache服务这些文件)。
我已经重新启动Apache甚至服务器。 如果我改变.conf文件的顺序,以便dev是第一个,我总是看到。 任何build议将如此赞赏。 谢谢!
更新
我发现自己又回到了这个问题! 如果你知道你的语法是正确的,你可能会有一个糟糕的符号链接。 删除它并重新创build,重新启动Apache之间。 我只是做了这个,它解决了几个小时的头部划伤。 在CentOS你可以用httpd -S来检查你的可用虚拟主机
更新2
我也发现这个问题存在,当虚拟主机的Apache 日志文件不存在,或不可写。
将通配符子域redirect到子目录,而不更改地址栏中的URL
重写子域名
Nginx将内部http服务公开为https子域
Apache mod_rewrite任何子域到根域,除非作为virtualdocumentroot存在
听起来就像你需要添加NameVirtualHost指令到你的配置。
NameVirtualHost *:80
在某些情况下,Apache可能无法正确处理*:80虚拟主机。 在这种情况下,您应该直接在特定的IP上映射VirtualHosts。
NameVirtualHost 8.8.8.8:80 <VirtualHost 8.8.8.8:80> serverName staging.mydomain.com serverAlias stage.mydomain.com DocumentRoot /var/www/html/mydomain.com/staging/ </VirtualHost> <VirtualHost 8.8.8.8:80> serverName dev.mydomain.com serverAlias development.mydomain.com DocumentRoot /var/www/html/mydomain.com/dev/ </VirtualHost>
您也可以运行apachectl -t -D DUMP_VHOSTS来查看Apache如何解析VirtualHost配置。
更新:正如在评论中提到的,通常你可以使用NameVirtualHost *:80 。 所以大多数情况下,您可以按如下方式配置虚拟主机。
NameVirtualHost *:80 <VirtualHost *:80> serverName staging.mydomain.com serverAlias stage.mydomain.com DocumentRoot /var/www/html/mydomain.com/staging/ </VirtualHost> <VirtualHost *:80> serverName dev.mydomain.com serverAlias development.mydomain.com DocumentRoot /var/www/html/mydomain.com/dev/ </VirtualHost>