apache - 如果404和图像重定向到另一台服务器

时间:2015-12-27 05:31:40

标签: php apache redirect

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

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

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

非常感谢您的帮助。

2 个答案:

答案 0 :(得分: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()我已使用此功能从请求网址中提取扩展信息(如果有)
  2. get_headers() This function向我们提供了目标服务器向我们发送请求的HTTP response信息。我已经用它来检查它是否为我们的请求发送了HTTP/1.1 404 Not Found标题。
  3. 最后,我建议您使用header()函数重定向到其他地方(如果它是媒体请求且该文件不存在。)

答案 1 :(得分:0)

您需要重新安装快速Web服务器的新副本;你必须改变它,它需要几个小时来弄明白。

备份您当前的设置。重新安装和apache并尝试再次imho。