Httpd / Apache2虚拟主机和主机名冲突

我有一个域,即test.example.com。

我用uisng设置我的服务器的主机名为:

hostname test.example.com 

然后我在/etc/httpd/conf/httpd.conf中添加一个虚拟主机

 NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot /var/www/html/ </VirtualHost> <VirtualHost *:80> DocumentRoot /var/www/html/mydir ServerName test.example.com ServerAlias www.test.example.com </VirtualHost> 

然后我重新启动Httpd服务。 如果我尝试访问test.example.com,我得到index.php / var / www / html而不是指定的文件夹。 如果我将主机名更改为除此之外的其他内容,然后重新启动httpd,则虚拟主机将按预期工作,所以我只能假定在有主机名的传入连接时,apache会剥离该url。

在PHP打印时

 $_SERVER['REQUEST_URI'] $_SERVER['REDIRECT_URL'] 

我得到/。 谁能告诉我如何才能克服这个问题,或者我应该保持主机名设置为别的? 我有一个使用主机名作为目录名的备份脚本,所以我可以很好地组织备份,这是我首先更改主机名的主要原因。

在你的情况下,我会取代

 NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot /var/www/html/ </VirtualHost> <VirtualHost *:80> DocumentRoot /var/www/html/mydir ServerName test.example.com ServerAlias www.test.example.com </VirtualHost> 

通过

 <VirtualHost *:80> DocumentRoot /var/www/html/mydir ServerName test.example.com ServerAlias www.test.example.com </VirtualHost> # /!\ THIS HAS TO BE ON THE LAST POSITION /!\ <VirtualHost *:80 *:443> ServerName localhost ServerAlias * DocumentRoot /var/www/html/ </VirtualHost> 

像test.example.com&www.test.example.com以外的所有请求都将提供/ var / www / html /

更多信息: NameVirtualHost在你的情况下没有用,并且已经在Apache 2.4中被删除了https://httpd.apache.org/docs/2.4/en/upgrading.html

我会build议改变:

 <VirtualHost *:80> DocumentRoot /var/www/html/ </VirtualHost> 

至 :

 <VirtualHost *:80> DocumentRoot /var/www/html/ ServerName example.com ServerAlias www.example.com </VirtualHost> 

我已经多次在客户服务器上看到这个问题,并解决了这个问题。

我通常将虚拟主机条目的服务器名称指向即将到来或未来的PHP文件主目录的目录,直到准备好将服务器或网站直播为止,因为它将优先于将来的任何条目。