我正在尝试制作一个网站的镜像,但 URL 包含几个路径,当以正常的 wget
方式复制到磁盘上的文件时,这些路径会重叠。问题表现为 http://example.com/news
和 http://example.com/news/article1
等 URL。
Wget 将这些 URL 下载为 /news
和 /news/article1
,但这意味着 /news
文件被文件夹覆盖同名。
正确的静态镜像需要将这两个 URL 下载为 /news/index.html
和 /news/article1
。
我试图通过运行 wget
两次并相应地移动文件来解决这个问题,但这对我来说效果不佳。 /news
路径有指向需要转换的 /news/article1
的链接。我正在使用 -k
选项来转换链接,但是如果我运行 wget
两次,它不会转换这些不相关的下载文件之间的链接。
这是我的命令:
wget -p -r -l4 -k -d -nH http://example.com
这是我尝试过的解决方法的示例:
# wget once at first level (gets /news path but not /news/*)
wget -p -r -l1 -k -nH http://example.com
# move /news file to temp path
mv news /tmp/news.html
# wget again to get everything else (notice the different level value)
wget -p -r -l4 -k -nH http://example.com
# move temp path back to /news/index.html
mv /tmp/news.html news/index.html
在上面的例子中,/news
页面上本应指向/news/article1
的链接没有被转换。
有人知道如何使用 wget
解决这个问题吗?是否有其他工具可以更好地工作?
最佳答案
我想通了!
问题是我假设 /news/index.html
是我需要的 URL。仔细阅读手册页后,我发现 -E (--adjust-extension)
解决了我的问题。此标志强制 wget
将 .html
扩展应用于它下载的所有 HTML 文件。
将其与 -k
相结合以转换链接会产生一个 100% 可用的镜像,其中包含所有需要的页面。
这是下载文件和路径的示例 map :
http://example.com/news --> /news.html
http://example.com/news/article1 --> /news/article1.html
作为功能性镜子,这很棒。默认网络服务器配置(至少对于 Apache)似乎允许路径 http://sitemirror.com/news/article1
加载 /news/article1.html
内容。但是,可能需要重写以防止 http:/sitemirror.com/news
路径显示 404 或文件夹索引。这应该不难。
哦,这是我最后的 wget
命令:
wget -p -r -l4 -E -k -nH http://example.com
关于linux - 使用 wget 镜像具有相同名称的路径和子文件夹的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712813/