【问题标题】:Load external site with PHP without breaking relative links in that site使用 PHP 加载外部站点而不破坏该站点中的相关链接
【发布时间】:2019-08-19 18:44:11
【问题描述】:

我有一个 php 页面,我正在尝试加载,然后回显和外部页面,(它位于同一台服务器中,但在完全不同的路径/域中,如果这很重要的话)。

我尝试过同时使用file_get_contents()curl。他们都正确加载了目标页面的 html,问题是它没有正确显示,因为该目标页面具有指向多个文件(图像、css、javascript)的相对链接。

有什么方法可以用 PHP 来完成这个任务吗?如果没有,下一个最好的方法是什么?目标站点必须看起来像是从初始页面加载的(URL 方式),我不想进行重定向。

所以,浏览器会显示http://example.com/initial-page.php,即使它的内容来自http://example2.com/target-page.php

编辑: 这可以通过 iframe 轻松完成,但出于多种原因,我也想避免这种情况,其中之一是因为使用 iframe 会破坏目标站点的响应能力。我也无法更改目标站点的代码来解决这个问题。

【问题讨论】:

  • 由于这是在同一台服务器上获取 HTML 内容的一种相当非正统的方法,我认为您在处理它的方式上必须是非正统的。您可以file_get_contents() 的返回内容上使用preg_replace() 将这些相对路径切换到它们的完整路径。也许像 preg_replace("$\/", "http://example.com/", $pagecontent) 之类的东西(可能不是 100%,但它在球场上)。
  • @JNevill 我确实考虑过这一点,但目标站点的脚本也使用相对路径加载内容,我认为我无法用这种方法解决这个问题,但谢谢!
  • 您可以添加 base 标签来指定用于文档中包含的所有相对 URL 的基本 URL,例如 <base href="http://example.com" />

标签: php curl file-get-contents


【解决方案1】:

最后,解决方案是我尝试做的事情(使用 curl)和 WebRookie 建议在通过 curl 加载的页面中使用 base html 标记的组合.

在我的特殊情况下,我将 基本 URL 作为参数传递给 curl,然后在加载的页面中回显它,允许我从不同的网站加载同一页面(这是另一个我想这样做的原因)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 2013-02-06
    相关资源
    最近更新 更多