我正在尝试将完整的网站镜像到另一个域。
我正在尝试使用
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 尝试在不进行身份验证的情况下获取其他文件。我确信其中存在一种模式和合理的理由,但我没有费心去调查可访问链接和不可访问链接之间的差异。