8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

跨多个域提供图像的问题:重定向循环和不正确的 Referer 处理

Andrea H 2月前

37 0

我正在开展一个项目,其中有两个域名:imagedomain.com 和 i.imagedomain.com。主域名 (imagedomain.com) 处理用户交互和访问逻辑,而子域名 (i.imaged...

我正在开发一个项目,其中有两个域名:imagedomain.com 和 i.imagedomain.com。主域名 (imagedomain.com) 处理用户交互和访问逻辑,而子域名 (i.imagedomain.com) 提供实际的图像文件。但是,当我尝试提供嵌入图像时,我遇到了重定向循环和不正确的 referer 处理问题。

问题 重定向循环:有时,当尝试访问图像时,浏览器会卡在重定向循环中。错误的 Referer 处理:嵌入的图像有时被视为直接访问,从而导致不必要的重定向。

设置详细信息imagedomain.com 处理访问逻辑并redirects.i.imagedomain.com 提供实际的图像文件,存储在 S3 兼容服务(Wasabi)上。

我已尝试 确保已进行引荐来源检查以区分合法的嵌入式请求和直接访问。我确认 i.imagedomain.com 配置为直接提供图像而没有任何不必要的重定向。

我如何才能像 Imgur 那样正确地提供来自 i.imagedomain.com 的嵌入图像,而不会触发重定向循环或将其误认为直接访问?可以对 .htaccess 和 PHP 脚本进行哪些改进以确保能够可靠地处理这些情况?

任何帮助或指导都将不胜感激!

SetupOn imagedomain.com,我有以下.htaccess 规则,将图像请求重定向到 PHP 脚本:

重写引擎开启

# Match image and video file requests
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|png|gif|mp4|webm|bmp|tiff|svg)$ [NC]

# Avoid redirect loops by skipping requests already handled by image-proxy.php
RewriteCond %{REQUEST_URI} !/image-proxy.php$ [NC]

# Redirect all other image requests to the proxy script
RewriteRule ^(.*)\.(jpg|jpeg|png|gif|mp4|webm|bmp|tiff|svg)$ /image-proxy.php?image=$1 [QSA,L]

这是用于决定是否直接提供图像或重定向的 PHP 脚本(image-proxy.php):

<?php
// Get the image name from the URL
$imageName = basename($_GET['image']);

// Get the referer header
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

// Initialize the direct access flag
$isDirectAccess = false;

// Perform referer checks
if (empty($referer)) {
    // No referer typically means direct access (e.g., user entering the URL directly)
    $isDirectAccess = true;
} else {
    // Parse the referer domain
    $refererDomain = parse_url($referer, PHP_URL_HOST);

    if ($refererDomain !== false) {
        if (strpos($refererDomain, 'imagedomain.com') !== false) {
            // Legitimate request from within your domain (e.g., embedded images)
            $isDirectAccess = false;
        } else {
            // Referer from an external domain - likely direct access from elsewhere
            $isDirectAccess = true;
        }
    } else {
        // Could not parse the referer domain - treat cautiously as direct access
        $isDirectAccess = true;
    }
}

// Handle the request based on the checks
if ($isDirectAccess) {
    // Redirect to the image's page on your site
    header("Location: https://imagedomain.com/" . urlencode($imageName), true, 301);
    exit();
} else {
    // Serve the image directly from Wasabi (for embedded images and internal links)
    $wasabiUrl = "https://i.imagedomain.com.s3.wasabisys.com/" . $imageName;

    // Open the file on Wasabi to serve it
    $fileHandle = @fopen($wasabiUrl, 'rb');
    if ($fileHandle) {
        // Determine the MIME type by reading the file headers from Wasabi
        $fileHeaders = stream_get_meta_data($fileHandle);
        foreach ($fileHeaders['wrapper_data'] as $header) {
            if (stripos($header, 'Content-Type:') === 0) {
                header($header);
                break;
            }
        }

        // Serve the file content
        fpassthru($fileHandle);
        fclose($fileHandle);
    } else {
        // If the image is not found, return a 404 error
        header("HTTP/1.0 404 Not Found");
        echo "Image not found.";
    }
    exit();
}
帖子版权声明 1、本帖标题:跨多个域提供图像的问题:重定向循环和不正确的 Referer 处理
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Andrea H在本站《.htaccess》版块原创发布, 转载请注明出处!
最新回复 (0)
返回
作者最近主题: