我在wisdom.host22.com/wp上搭建了wordpress,可以用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无法访问,为什么?31.170.160.189/wp
在火狐浏览器输入31.170.160.189/wp后,会跳转到
http://error404.000webhost.com/,why?
答案1
您的 WordPress 应用程序可能是 托管的众多网站之一host22.com
。
有一个网络服务器正在监听 IP31.170.160.189
并为您的页面和所有其他页面提供服务。
如果直接通过 IP 查询服务器,它怎么知道要服务哪个网站?该 IP 不完全属于您的子域名。因此,您将被重定向到一个404 NOT FOUND
页面。
当它被正确的主机名(如)查询时wisdom.host22.com
,它知道该做什么,因为主机名是浏览器发出的 HTTP 请求的一部分。根据请求标头提供内容是一种常见的技术,通常称为“虚拟主机”。这样,网络服务器就可以从同一 IP 地址提供许多不同的网站。
您可以从命令行尝试行为的差异
/wp
首先,让我们从 Web 服务器请求资源并发送其 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将带您到默认虚拟主机,在这种情况下,它似乎没有定义。
我希望这有帮助。