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

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

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

我通过使用以下命令将我的服务器的主机名设置为:

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,我会在 /var/www/html 而不是指定文件夹中获得 index.php。如果我将主机名更改为其他名称,然后重新启动 httpd,虚拟主机将按预期工作,因此我只能假设当有传入连接到主机名时,apache 会删除 URL。

在 php 中打印时

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

我得到了 /。有人能告诉我如何解决这个问题吗?还是我应该将主机名设置为其他名称?我有一个备份脚本,它使用主机名作为目录名,这样我就可以很好地组织备份,这是我首先更改主机名的主要原因。

答案1

在你的情况下,我会更换

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

答案2

我建议改变的是:

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

到 :

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

我在客户服务器上多次看到过这种情况,并且已经解决了该问题。

我通常将没有服务器名称的虚拟主机条目指向即将推出或将来的 php 文件目录,直到我准备好让服务器或网站上线,因为它将优先于任何未来的条目。

相关内容