You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iframe嵌入网站点击链接跳转至原站问题求助(附PHP代码)

解决iframe内嵌网站点击链接跳转原网站的问题

我来帮你搞定这个问题!你遇到的情况是因为iframe里加载的页面链接要么是原网站的绝对URL,要么没有指定在iframe内打开的目标,点击后浏览器就直接跳出iframe跳转至原网站了。结合你用PHP file_get_contents 拉取内容的思路,咱们可以通过修改拉取到的HTML内容来拦截这些跳转,让所有链接都在iframe内或者通过你的代理页面加载。

核心问题分析

  • 原网站的链接都是绝对URL(比如 http://anusha.bluethink.in/b4bstaging/personalised-balls.html),点击后浏览器直接加载外部域名,跳出iframe。
  • 部分链接可能设置了 target="_top" 或 target="_parent",强制在顶级窗口打开,直接跳出iframe。
  • 原网站的静态资源(CSS、JS、图片)如果是相对路径,直接拉取后会在你的域名下找不到,导致页面样式/功能失效。

解决方案:PHP代理页面修改链接与资源路径

我们可以把 demo1.php 改成一个代理页面,负责拉取目标网站内容并自动修改所有链接和资源路径,让它们都指向代理页面,从而实现站内跳转不跳出iframe。

完整的demo1.php代码

<?php
// 允许访问的目标网站URL列表(安全起见,限制可代理的地址)
$allowedSites = [
    'http://anusha.bluethink.in/b4bstaging/',
    'http://anusha.bluethink.in/b4bstaging/personalised-balls.html'
];

// 目标网站的基础URL,用于拼接相对路径
$baseSiteUrl = 'http://anusha.bluethink.in/b4bstaging/';

// 处理请求:如果有url参数且在允许列表内,加载对应页面;否则加载默认首页
$targetUrl = isset($_GET['url']) && in_array($_GET['url'], $allowedSites) 
    ? $_GET['url'] 
    : $allowedSites[0];

// 设置请求头,模拟浏览器访问(避免被目标网站拦截)
$opts = [
    'http' => [
        'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36\r\n"
    ]
];
$context = stream_context_create($opts);
$pageContent = file_get_contents($targetUrl, false, $context);

// 1. 替换所有<a>标签的href:将绝对URL和相对URL都转为代理链接,指定target="_self"在iframe内打开
// 替换绝对URL的链接
$pageContent = preg_replace(
    '/<a\s+href="(' . preg_quote($baseSiteUrl, '/') . '[^"]+)"/i',
    '<a href="demo1.php?url=$1" target="_self"',
    $pageContent
);
// 替换相对路径的链接(比如 href="/personalised-balls.html" 或 href="about.html")
$pageContent = preg_replace(
    '/<a\s+href="([^http][^"]+)"/i',
    '<a href="demo1.php?url=' . $baseSiteUrl . '$1" target="_self"',
    $pageContent
);

// 2. 替换静态资源的路径(CSS、JS、图片等),确保从原网站加载
$pageContent = preg_replace(
    '/(src|href)="\/([^"]+)"/i',
    '$1="' . $baseSiteUrl . '$2"',
    $pageContent
);

// 输出处理后的内容
echo $pageContent;
?>

你的iframe代码保持不变

<iframe src="demo1.php" frameborder="0" width="100%" height="800px"></iframe>

额外注意事项

  • 防盗链拦截:如果目标网站有防盗链机制,file_get_contents 可能无法获取内容,你可以尝试在请求头中添加更多模拟浏览器的参数,或者使用cURL替代 file_get_contents。
  • 表单提交:如果原网站有表单,提交后也会跳转到原网站,你需要额外处理表单的 action 属性,方法和替换链接类似,把表单action指向代理页面并处理提交逻辑。
  • 同源策略:因为我们是把原网站内容拉取到自己的域名下输出,所以不会有iframe跨域修改DOM的问题,所有JS和样式都能正常运行。

内容的提问来源于stack exchange,提问作者shekhar saini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:44:18