gpt4 book ai didi

php - 代理网站中的相对 URL 不起作用

转载 作者:可可西里 更新时间:2023-11-01 00:03:09 26 4
gpt4 key购买 nike

在 PHP 中,我编写了一个接受 url、用户代理和其他设置的代理函数。然后该函数对网站发出 curl 请求,并将带有正确 html 内容类型 header 的输出打印到 iframe 中(这是必要的,只是因为我需要更改一些 header )。

代理输出通常包含大量具有相对 URL 的 Assets ,并且实际上继承了我网站的主机名,而不是代理网站:

例子:[http://MYSITE.com/proxy?url=http://somesite.com] 将返回 [http://somesite.com]

在响应 html 中,有这样的东西:

<link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png">

问题:

Assets 不是在 http://somesite.com/assets/ico/apple-touch-icon-144-precomposed.png 寻找 Assets ,而是试图在http://MYSITE.com/assets/ico/apple-touch-icon-144-precomposed.png 这是错误的。

问题:

我需要做什么才能让他们的相对路径 Assets 通过代理正确加载?

最佳答案

<base> tag怎么样? ?您可以将它放在头部,它会通知浏览器将什么用作页面上所有相对 URL 的基本路径:

<head>
<base href="http://somesite.com/">
</head>

您可以将它添加到您使用 DOMDocument 提供的每个页面(请注意,这是针对 PHP5.4 的,因为数组解引用,但这对于早期版本来说很容易修复):

if($contentType == 'text/html') {
$doc = DOMDocument::loadHTML($html);
$head = $doc->getElementsByTagName('head')[0];

if(count($head->getElementsByTagName('base')) == 0) {
$base = DOMDocument::createElement('base');
$base->setAttribute('href', $urlOfPageDir);
}

$head->appendChild($base);
echo $doc->saveHTML();
}

请注意,$urlOfPageDir 必须是页面所在目录的绝对 URL。有关基本标签的更多信息,请参阅此 SO 问题:Is it recommended to use the <base> html tag?

关于php - 代理网站中的相对 URL 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com