wget --convert-links 附加“index.html”

wget --convert-links 附加“index.html”

我正在尝试使用 wget 镜像一个网站。

网站上的大多数链接都指向类似这样的子文件夹http://foo.com/x/

但是,当我使用 时--convert-links,它会将 url 重写为http://foo.com/x/index.html

有人能提供解决方案来阻止将此文件名附加到 url 链接吗?

答案1

当你浏览网站时http://example.com/foo/bar实际情况是这样的:

  1. 您请求http://example.com/foo/bar
  2. 网站将您重定向至http://example.com/foo/bar/
  3. 您请求http://example.com/foo/bar/
  4. 网站在目录中查找默认条目(具体是什么取决于 Web 服务器)并返回该条目。如果没有默认条目,则返回目录列表或返回“禁止访问”。

正如我所说,默认条目取决于 Web 服务器及其设置。

默认条目包括:

  • 索引.html
  • 主页
  • 索引.php
  • 索引文件
  • 默认.htm¹

当在本地操作而不是通过 Web 服务器操作时,文件系统无法使用默认条目进行回复,因为它没有网站或 index.html 或类似内容的概念。本地文件系统的事件顺序如下:

  1. 打开 /path/to/example.com/foo/bar
  2. 此文件是一个目录。以下是文件列表。
  3. 显示文件列表。

使用镜像网站时,wget如果没有默认的入口文件来将数据存储在目录中,则无法将 URL 存储为文件,因此它会创建一个(默认值:index.html)。--convert-links 选项会重写文件中的 URL,以确保它们指向这个新创建的 index.html 文件,而不仅仅是目录名称。

如果网站没有默认条目,它将发送格式正确的目录列表(如果权限允许)。这将保存在 index.html 文件中。

这是理想的操作,因为它可以确保当您在本地单击链接时,它指向您想要查看的文件,而不是包含该文件的目录。这就是使用 --convert-links 选项的全部意义所在。如果没有本地 index.html 文件,您就无法拥有网站的本地副本。任何其他操作都会破坏网站的本地副本。

因此,您无法阻止 --convert-links 附加 index.html,因为它需要在本地工作。

¹ 这个是微软独有的——相信他们的做法和别人完全不同。

相关内容