Назад | Перейти на главную страницу

Конфликт виртуального хоста 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']

Я получил /. Может ли кто-нибудь сказать мне, как решить эту проблему, или мне следует оставить имя хоста как другое? У меня есть сценарий резервного копирования, который использует имя хоста в качестве имени каталога, чтобы я мог хорошо организовать резервное копирование, это основная причина, по которой я изначально изменил имя хоста.

Я бы порекомендовал изменить:

<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