我有一个域名,即 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 文件目录,直到我准备好让服务器或网站上线,因为它将优先于任何未来的条目。