如何镜像一个网站?(静态版)

55 天前
 ztm0929

因为一些原因,我想将 A 社区(有账号系统,用户可编辑)静态地复制为 B 网站(其他都一样,就是没有了账号系统,但是主题等结构都还在,访问者只能查看已发布的帖子),请问技术上有什么实现思路?两个站点实际上存放在各自的物理服务器内,Nginx 反向代理应该无法实现吧?

两个社区都是我个人搭建的,服务器、数据库都可以完全控制。

980 次点击
所在节点    问与答
6 条回复
an0nym0u5u5er
55 天前
思路很多
一、nginx 有个 sub_title 模块,可以实现类似 str_replace(A,B) 这样的功能,如果要替换的内容很少,可以用这个实现
二、静态化,B 站直接返回 HTML ,优点是每个 URL 处理一次就好,适用于内容不怎么变化的
三、自定义代理,比如你写一个 PHP 脚本作为中转程序,B 站的数据请求这个 PHP 接口,PHP 可以做中间的一些逻辑处理,比如屏蔽一些数据,后台管理页面,去除一些内容之类的,比第一个用 nginx 实现更容易,更灵活
cruzzz
55 天前
我不懂代码,但我之前做的事情和你说的类似。我有 A 站(图片反代站,信息丰富,)一枚,然后我想再搞个 B 站,用来做布局精简,顺便拿来测试一些 SEO 手段,看看能否导致 SEO 毁灭。 就去找 GPT 要了一些代码,它给我的代码就类似这样
// 创建上下文
$context = stream_context_create([
'http' => [
'follow_location' => false, // 禁止自动跟随重定向
],
]);

// 获取 HTML 内容
$htmlLines = file($url, false, $context);
$html = implode("", $htmlLines);

// 创建 DOMDocument 对象并加载 HTML 内容
$dom = new DOMDocument();
$dom->loadHTML($html);

// 创建 DOMXPath 对象
$xpath = new DOMXPath($dom);

// 使用 XPath 查询表达式获取所有 article 元素
$articles = $xpath->query('//article');

// Initialize the result array
$result = array();

// 遍历每个 article 元素
foreach ($articles as $article) {


前提就是,网页地址和模板相对来说很好找规则,否则这个 dom 不容易定位。

这样的效果就是:B 站重新搞个模板,布局换一换,数据全都是临时去 A 站请求的。
然后……谷歌还收录了几万个,现在养了一段时间,bing+google 的日 IP 也上 1K 了= =
yuzo555
55 天前
都是你自己控制的那就写个脚本批量生成静态网页不就行了
busterian
55 天前
httrack
wen20
55 天前
域名解析就能实现
flynaj
52 天前
直接同步数据库性能最好。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1037461

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX