域名绑定、解析的意义和作用参考:http://docs.waterbear.pw/562.html

这里不详细介绍浏览器访问一个网址时DNS如何解析域名并发送请求到服务端。只说明在请求一个资源时服务器是如何响应这个资源到客户端。

7.jpg

这里以访问http://docs.landui.com/archives/540.html为例:

8.jpg

当我们在请求docs.landui.com下资源archives/540.html时候,正常返回200状态。

要正常返回200状态而不是403或者404,如果站点是纯静态,则docs.landui.com站点的根目录下应该存在一个archives文件夹,并且archives文件夹下有一个540.html的文件。类似的情况,在分析静态资源(比如js\css\jpg\mp4文件)404错误时候,查看其访问路径,然后在目录下查看对应的位置是否有这个文件。

更多的情况是站点使用了伪静态(伪静态说明该资源不是真实的一个静态资源存在站点根目录下,而是在响应请求的时候由其他文件进行请求的响应),比如http://docs.landui.com/archives/540.html其实是由其他php文件进行数据库查询后再反馈到浏览器,不是真真实实存在一个静态html文件在服务器上。这种情况如果访问404,就需要考虑程序是否是用了伪静态并设置了支持伪静态。

伪静态设置参考:http://docs.waterbear.pw/566.html

例如下图。我们看到客户站点首页打开时请求到findAllIndex.action这个路径,但是站点目录下并没有存在findAllIndex.action这个文件,但是为什么打开还是200而不是404无法找到页面呢?

9.jpg

和伪静态一样,.net、java、python等脚本写的站点,大部分都有一个拦截器进行请求拦截,然后把请求路由到指定文件来响应请求。如下图,其配置文件定义了请求到findAllIndex.action时由index.jsp来进行响应。

10.jpg

同样的,asp.net的程序也可以直接将url重写在程序里定义好,在日常问题处理中不要打开站点目录没看到对应的文件,就想当然的以为是文件没有上传完。多考虑下程序池设置、程序映射是否正常。

一般来说对于静态资源、网站源码,比如php文件、css、js、图片、视频文件、字体文件、rar/zip压缩文件是很少会使用URL重写到其他文件的,处理这类资源404问题时,直接根据请求路径查对应的目录下是否存在该文件。例如:http://docs.landui.com/123.php要能正常请求,那么在站点根目录下会存在123.php这个文件。

对于动态站点某个页面打开404,对于php程序多考虑是否需要伪静态支持,对于asp.net程序多考虑程序池设置(经典和集成两种模式)是否正确。

理解了站点请求和站点资源的对应后,假如我们需要下载一个站点备份,那么我们就可以直接打包站点文件为abcxxx.rar然后放到站点目录ccc下,通过浏览器请求http://站点域名/ccc/abcxxx.rar方式下载即可。