У меня есть домен т.е. 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
Я бы порекомендовал изменить :
<VirtualHost *:80>
DocumentRoot /var/www/html/
</VirtualHost>
на :
<VirtualHost *:80>
DocumentRoot /var/www/html/
ServerName example.com
ServerAlias www.example.com
</VirtualHost>
Я видел это несколько раз на клиентских серверах, и это исправило проблему.
Обычно я указываю запись о Виртуальном Хосте (Virtual Host) с именем сервера в каталог с предстоящим или будущим домом php файла до тех пор, пока я не буду готов взять сервер или сайт вживую, так как это будет иметь преимущественную силу перед любыми будущими записями.
.