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