在htaccess重定向后从图像中获取奇怪的字符

时间:2016-03-27 12:31:04

标签: php regex .htaccess redirect mod-rewrite

我希望在通过脚本查看图像后获得查看器的HTTP_USER_AGENT

这是目录

/www
|-- /other.org
|-- /example.com
    |-- /sub
        |-- .htaccess
        |-- agentlog.php
        |-- /i
            |-- photo.png

我已将图像文件和脚本分隔到不同的文件夹中。所有文件的根目录都在域的子目录中。所以http://example.com/sub,图片存储在http://example.com/sub/i.htaccess文件会将所有图像重定向到PHP文件,该文件获取HTTP_USER_AGENT并将其存储在数据库中,并通过子域显示图像,该子域不会被.htaccess重定向。

更详细地说,用户在浏览器中输入http://example.com/sub/photo.png,对于观看者来说,它看起来就像是图像,观众不会注意到任何其他内容或任何重定向。但是,当用户输入时会发生什么

.htaccess将检查photo.png中是否存在http://example.com/sub/i/photo.png,如果图片存在,则将请求重定向到agentlog.php处的http://example.com/sub/agentlog.php文件,然后agentlog.php会记录并保存到数据库,并显示photo.pnghttp://i.example.com/photo.png,其中http://i.example.com指向/www/sub/i

以下是.htaccess文件

RewriteEngine On
RewriteCond %{HTTP_HOST} !^i\. [NC]
RewriteCond %{DOCUMENT_ROOT}/i/$1 -f
RewriteRule ^(.+\.(?:jpe?g|png|gif))$ agentlog.php [NC,L]

这是没有sql代码的agentlog.php文件

<?php
$path = $_SERVER['REQUEST_URI'];
$agent = $_SERVER['HTTP_USER_AGENT'];
$ext = pathinfo($_SERVER['REQUEST_URI'], PATHINFO_EXTENSION);
$filename = basename($path);

header("Content-Type: image/$ext");

$img = "http://i.example.com/$filename";
readfile($img);

除了图像实际上没有显示自己,.htaccess重定向外,一切正常。它显示

�PNG  IHDR�^���� �IDATx��ݯ��u���............

而不是实际的图像本身。

如果我直接访问图像,它工作正常,所以我认为问题出在.htaccess但我不知道还有什么其他规则可以使这个工作。

如果需要其他更多信息,我将很乐意加入。我该如何解决这个问题?或者有什么方法可以做到这一点?我已经放入了内容标题,但不确定它为什么不起作用。

2 个答案:

答案 0 :(得分:2)

如果您使用结束标记?>检查,之后是否有任何空格或换行符。省略结束标记被认为是一种很好的做法。

<强>编辑

试试这个: -

        $img = "http://i.example.com/$filename";
        header("Content-Type: image/$ext");
        header('Content-Length: ' . filesize($img)); 
        ob_clean(); // Clean (erase) the output buffer.
        flush(); // Flush system output buffer.
        readfile($img); // Output the file to browser.
        exit; // Stop execution of the script

答案 1 :(得分:0)

  

一切都很好,除了图像实际上没有显示,    .htaccess重定向。它显示

     

�PNG IHDR�^���� �IDATx��ݯ��u���............

这是标题的错误(mime类型错误) - text / plain而不是image /...

无论如何,你的.htaccess在我的环境中不起作用 它应该是这样的:

RewriteEngine On

RewriteCond %{REQUEST_URI} (.+\.(?:jpe?g|png|gif))
RewriteRule ^(.+\.(?:jpe?g|png|gif))$ agentlog.php [NC,L]

PHP代码可以是这样的

<?php
$path = $_SERVER['REQUEST_URI'];
$agent = $_SERVER['HTTP_USER_AGENT'];
$ext = pathinfo($_SERVER['REQUEST_URI'], PATHINFO_EXTENSION);
$filename = basename($path);

header("Content-Type: image/".$ext);

readfile($filename);
?>