【问题标题】:apache - if 404 and image redirect to another serverapache - 如果 404 和图像重定向到另一台服务器
【发布时间】:2015-12-27 14:33:03
【问题描述】:

我遇到了执行标题中的内容的需要 - 检查它是否是 404 错误和媒体请求(基本上是 jpg、png、gif、bmp、mp3、pdf 等) - 将请求重定向到另一台服务器。

原因是 Web 应用程序是易受攻击的开源之一,我目前无法修复与上传相关的问题,因此阻止了所有通过 php.ini 的上传(file_uploads=off)。我将应用程序复制到另一个受 htpwd 保护的服务器,该服务器只允许在没有密码的情况下访问上述媒体类型。

我没有设法正确调整要检查的代码 - 如果 404 错误(因此它尚未在服务器上)+ 媒体请求(在扩展程序之上)转到 XXX.XXX.XXX.XXX/$1。

不胜感激。

【问题讨论】:

    标签: php apache redirect


    【解决方案1】:

    根据您的具体需求,我编写了一个简单的函数。它可能会帮助你。检查并在必要时进行必要的调整:

    功能:

    <?php
        function checkMedia($request) {
            $info = pathinfo($request);
            $extension = @$info['extension'];
            $valid_formats = array("pdf", "png", "jpeg"); // add all media extensions you want to check against
            foreach($valid_formats AS $format) {
                if($format == $extension) {
                    $headers = @get_headers($request);
                    if($headers[0] == 'HTTP/1.1 404 Not Found') {
                        return true;
                    }
                }
            }
        }
    ?>
    

    然后使用这样的函数来检查请求类型和文件是否存在:

    <?php
        $request = "https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png";        
        $media = checkMedia($request);
        if($media) {
            // it is a media request and file does not exist
            // header("Location: somepath.php");
        } else {
            // it is not a media request or the file exists on server
        }
    ?>
    

    说明:我使用了 PHP 的三个内置函数来编写这个新函数。

    1. pathinfo():我已经使用这个函数从请求 URL 中提取扩展信息(如果有)
    2. get_headers(): This function 向我们提供有关HTTP response 的信息,目标服务器向我们发送请求。我已经使用它来检查它是否向我们发送了 HTTP/1.1 404 Not Found 标头来满足我们的请求。
    3. 最后,如果是媒体请求且文件不存在,我建议您使用 header() 函数重定向到其他位置。

    【讨论】:

    • 非常感谢您的详细回答 - 我想到了一个更简单的 apache 解决方案 - 链接两个条件然后重定向 - 这样的事情可能吗?
    【解决方案2】:

    您需要重新安装 apace Web 服务器的新副本;你一定已经改变了它,它需要几个小时才能弄清楚。

    备份您当前的设置。重新安装和apache,然后再试一次恕我直言。

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 2021-04-29
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      相关资源
      最近更新 更多