wget -k 不转换所有链接

wget -k 不转换所有链接

我正在尝试将完整的网站镜像到另一个域。

我正在尝试使用

wget -mk http://example.com

然而 -k 选项保留一些原始 URL,而其他 URL 则被转换,例如:

<link rel="stylesheet" href="http://example.com/templates/css/style.css" type="text/css" />
<!--[if lt IE 8]>
  <link rel="stylesheet" href="/templates/css/ie.css" type="text/css" />
<![endif]-->
<!--[if lt IE 7]>
  <link rel="stylesheet" href="/templates/css/ie6.css" type="text/css" />
<![endif]-->

或者img标签:

<img src="http://example.com/templates/img/logo.jpg"

而a-标签已正确转换。

这些来自 index.html,wget 的输出表明,index.html 已转换

Converting example.com/index.html... 30-12

为什么会出现这种情况?

答案1

这来自 wget 联机帮助页,它可能解释了您所看到的内容:

-k --转换链接

下载完成后,转换文档中的链接,使其适合本地查看。这不仅会影响可见的超链接,还会影响文档中链接到外部内容的任何部分,例如嵌入图像、样式表链接、非 HTML 内容的超链接等。

每个链接都将通过以下两种方式之一进行更改:

  • 文件的链接已通过 Wget 下载将更改为引用它们作为相对链接指向的文件。

示例:如果下载的文件 /foo/doc.html 链接到 /bar/img.gif(也已下载),则 doc.html 中的链接将被修改为指向 ../bar/img.gif。这种转换对于目录的任意组合都可靠。

  • 文件的链接尚未通过 Wget 下载的将更改为包括主机名和它们指向的位置的绝对路径。

示例:如果下载的文件 /foo/doc.html 链接到 /bar/img.gif (或 ../bar/img.gif),则 doc.html 中的链接将被修改为指向http://主机名/bar/img.gif

如果没有更多细节,很难更准确。

答案2

可能是服务器上有robots.txt文件。-e robots=off在这种情况下,该选项会有所帮助。 (我在类似的情况下也是如此。)

答案3

如果镜像站点受 HTTP 身份验证保护,则需要使用命令行选项来提供用户名和密码。类似--http-user=someone和 的东西--http-password=secret似乎有效。将凭据指定为 url 的一部分https://someone:secret@somewhere/会出现意外情况,即仅下载某些文件,而 wget 尝试在不进行身份验证的情况下获取其他文件。我确信其中存在一种模式和合理的理由,但我没有费心去调查可访问链接和不可访问链接之间的差异。

相关内容