我正在尝试使用 wget 镜像一个网站。
网站上的大多数链接都指向类似这样的子文件夹http://foo.com/x/
。
但是,当我使用 时--convert-links
,它会将 url 重写为http://foo.com/x/index.html
。
有人能提供解决方案来阻止将此文件名附加到 url 链接吗?
答案1
当你浏览网站时http://example.com/foo/bar实际情况是这样的:
- 您请求http://example.com/foo/bar
- 网站将您重定向至http://example.com/foo/bar/
- 您请求http://example.com/foo/bar/
- 网站在目录中查找默认条目(具体是什么取决于 Web 服务器)并返回该条目。如果没有默认条目,则返回目录列表或返回“禁止访问”。
正如我所说,默认条目取决于 Web 服务器及其设置。
默认条目包括:
- 索引.html
- 主页
- 索引.php
- 索引文件
- 默认.htm¹
当在本地操作而不是通过 Web 服务器操作时,文件系统无法使用默认条目进行回复,因为它没有网站或 index.html 或类似内容的概念。本地文件系统的事件顺序如下:
- 打开 /path/to/example.com/foo/bar
- 此文件是一个目录。以下是文件列表。
- 显示文件列表。
使用镜像网站时,wget
如果没有默认的入口文件来将数据存储在目录中,则无法将 URL 存储为文件,因此它会创建一个(默认值:index.html)。--convert-links 选项会重写文件中的 URL,以确保它们指向这个新创建的 index.html 文件,而不仅仅是目录名称。
如果网站没有默认条目,它将发送格式正确的目录列表(如果权限允许)。这将保存在 index.html 文件中。
这是理想的操作,因为它可以确保当您在本地单击链接时,它指向您想要查看的文件,而不是包含该文件的目录。这就是使用 --convert-links 选项的全部意义所在。如果没有本地 index.html 文件,您就无法拥有网站的本地副本。任何其他操作都会破坏网站的本地副本。
因此,您无法阻止 --convert-links 附加 index.html,因为它需要在本地工作。
¹ 这个是微软独有的——相信他们的做法和别人完全不同。