Я создаю WordPress на wisdom.host22.com/wp, его можно посетить wisdom.host22.com/wp
в Firefox.
ping wisdom.host22.com
PING wisdom.host22.com (31.170.160.189) 56(84) bytes of data.
64 bytes from 31.170.160.189: icmp_seq=1 ttl=46 time=307 ms
По результатам ping IP-адрес домена — 31.170.160.189.
Невозможно посетить, чтобы ввести 31.170.160.189/wp в Firefox, почему? Когда вводишь 31.170.160.189/wp
в Firefox, URL перейдет в
http://error404.000webhost.com/,why?
решение1
Ваше приложение WordPress — один из многих веб-сайтов, размещенных на host22.com
.
Существует веб-сервер, прослушивающий IP 31.170.160.189
и обслуживающий вашу и все остальные страницы.
Если сервер напрямую запрашивается по его IP, как он должен знать, какой веб-сайт обслуживать? IP не принадлежит исключительно вашему поддомену. В результате вы перенаправляетесь на страницу 404 NOT FOUND
.
Когда он запрашивается с помощью правильного имени хоста, например wisdom.host22.com
, он знает, что делать, поскольку имя хоста является частью HTTP-запроса, который делает браузер. Обслуживание контента в зависимости от заголовка запроса является распространенной техникой, обычно называемой «виртуальным хостом». Таким образом, веб-сервер может предоставлять множество различных веб-сайтов с одного и того же IP-адреса.
Вы можете попробовать разницу в поведении из командной строки.
Сначала давайте запросим ресурс /wp
с веб-сервера и отправим его IP-адрес в виде Host
:
$ echo -e "GET /wp/ HTTP/1.1\nHost: 31.170.160.189\n" | netcat 31.170.160.189 80
HTTP/1.1 302 Found
Date: Sun, 11 Oct 2015 09:05:30 GMT
Server: Apache
Location: http://error404.000webhost.com/?
Content-Length: 216
Connection: close
Content-Type: text/html; charset=iso-8859-1
Как и ожидалось, сервер отвечает отправкой 404
страницы.
Теперь сделайте то же самое, но с Host
правильными настройками вашего поддомена.
$ echo -e "GET /wp/ HTTP/1.1\nHost: wisdom.host22.com\n" | netcat 31.170.160.189 80
HTTP/1.1 200 OK
Date: Sun, 11 Oct 2015 09:08:50 GMT
Server: Apache
X-Powered-By: PHP/5.2.17
X-Pingback: http://wisdom.host22.com/wp/xmlrpc.php
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
На этот раз сервер может выполнить команду (код состояния 200 OK
) и обслуживает вашу домашнюю страницу WordPress.
Команда netcat
открывает соединение с сервером на порту 80. Затем запрос ( echo
часть) отправляется на сервер. HTTP — это протокол открытого текста. Вы можете просто «поговорить» с сервером.
решение2
Когда вы отправляете HTTP-запрос на сервер, в него включена строка хоста. Когда Apache получает ее, он отправляет ее на любой виртуальный хост, определенный для этого адреса, как описано здесь:
https://serversforhackers.com/configuring-apache-virtual-hosts
Таким образом, если на созданном вами сервере есть виртуальный хост для wisdom.host22.com, ввод имени хоста перенесет вас туда, но ввод IP-адреса перенесет вас на виртуальный хост по умолчанию, который в данном случае, по-видимому, не был определен.
Надеюсь, это помогло.