【问题标题】:Determine if HTML broken file link request确定是否 HTML 损坏的文件链接请求
【发布时间】:2015-12-23 00:48:01
【问题描述】:

我开发了一个 PHP 应用程序,并在其中使用 apache 创建了一个路由系统。
使用此路由系统,每个 http 请求都指向 index.php,除非该请求是服务器上的实际文件。

我的问题是,如果文件不存在,每次文件请求传递 404 错误时,我的整个应用程序都会执行,导致我的应用程序变得非常慢。

我试着听$_SERVER 看看我是否会发现一些数据表明执行是由一个损坏的文件链接执行的,如果我发现任何东西我会执行die() 函数所以应用程序没有加载。

我在$_SERVER 上没有找到任何东西,也没有找到任何以下功能:

getallheaders();
headers_list();
headers_sent();
http_response_code();

最初我使用下面的脚本,但后来发现如果有人在请求的末尾添加了一个类似somestring.test 的字符串,整个应用程序就会关闭。

if(FULL_URL !== rtrim(PROTOCOL.'://'.$_SERVER['HTTP_HOST']).'/'){
    // Get path extension
    $ext = pathinfo(FULL_URL, PATHINFO_EXTENSION);

    if($ext !== ''){
        die;
    }
}

如何判断http请求是损坏文件请求还是正常请求?

【问题讨论】:

    标签: php html apache http


    【解决方案1】:

    我已经通过收听函数getallheaders() 给出的字段Accept 解决了我的问题:

    if(FULL_URL !== rtrim(PROTOCOL.'://'.$_SERVER['HTTP_HOST']).'/'){
        // Get path extension
        $ext = pathinfo(FULL_URL, PATHINFO_EXTENSION);
    
        if($ext !== ''){
    
            $contenttype = isset(getallheaders()['Accept']) ? getallheaders()['Accept'] : NULL;
    
            if(empty($contenttype) || strpos($contenttype, 'text/html') === FALSE){
                die;
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2013-03-24
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多