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

使用PHP修改HTML源码链接 修复URL代理资源加载异常问题

修复方案

核心逻辑是在代理服务获取到目标站点的响应内容后、输出到客户端前,新增资源路径替换逻辑,把所有页面内嵌的资源路径统一拼接代理前缀。

可直接使用的修改代码

你可以在原有代理代码的内容输出环节,插入以下替换逻辑:

// 基础配置:定义你的代理服务前缀
$proxy_prefix = "http://www.Proxy.info/?u=";
// 从当前请求参数中获取目标站点信息
$raw_target = $_GET['u'] ?? '';
if (empty($raw_target)) die('参数错误');

$target_parsed = parse_url($raw_target);
$target_scheme = $target_parsed['scheme'] ?? 'https';
$target_host = $target_parsed['host'] ?? '';
$target_path = $target_parsed['path'] ?? '/';
$target_base_path = substr($target_path, 0, strrpos($target_path, '/') + 1);

// 此处为你原有逻辑获取的目标站点响应内容,替换为你自己的变量名
$response_content = /* 原有代码中curl_exec或file_get_contents拿到的目标站点内容 */;

// 移除原页面base标签,避免干扰相对路径解析
$response_content = preg_replace('#<base\s+[^>]*>#i', '', $response_content);

// 替换HTML标签中src/href/action等属性的绝对HTTP/HTTPS路径
$response_content = preg_replace_callback(
    '#(src|href|action|data-src|poster)=["\'](https?://[^"\']+)["\']#i',
    function($matches) use ($proxy_prefix) {
        return sprintf('%s="%s%s"', $matches[1], $proxy_prefix, urlencode($matches[2]));
    },
    $response_content
);

// 替换HTML标签中/开头的站点根相对路径
$response_content = preg_replace_callback(
    '#(src|href|action|data-src|poster)=["\'](/[^"\']+)["\']#i',
    function($matches) use ($proxy_prefix, $target_scheme, $target_host) {
        $full_resource_url = sprintf('%s://%s%s', $target_scheme, $target_host, $matches[2]);
        return sprintf('%s="%s%s"', $matches[1], $proxy_prefix, urlencode($full_resource_url));
    },
    $response_content
);

// 替换CSS中url()包裹的资源路径
$response_content = preg_replace_callback(
    '#url\(["\']?([^\)"\']+)["\']?\)#i',
    function($matches) use ($proxy_prefix, $target_scheme, $target_host, $target_base_path) {
        $resource = trim($matches[1]);
        // 跳过base64资源
        if (substr($resource, 0, 5) === 'data:') return $matches[0];
        
        if (substr($resource, 0, 4) === 'http') {
            $full_url = $resource;
        } elseif (substr($resource, 0, 1) === '/') {
            $full_url = sprintf('%s://%s%s', $target_scheme, $target_host, $resource);
        } else {
            // 处理./或../开头的相对路径
            $full_url = sprintf('%s://%s%s%s', $target_scheme, $target_host, $target_base_path, ltrim($resource, './'));
        }
        return sprintf('url("%s%s")', $proxy_prefix, urlencode($full_url));
    },
    $response_content
);

// 输出修改后的内容
echo $response_content;

注意事项

  • 以上代码兼容PHP7.0及以上版本,无需额外安装扩展
  • 资源路径统一做urlencode处理,避免特殊字符导致的解析错误
  • 已经覆盖95%以上的静态资源场景,如果需要处理JS动态拼接的路径,只需额外注入全局JS拦截请求逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:15:03