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

Php htaccess重定向后从图像中获取奇怪字符,php,regex,.htaccess,redirect,mod-rewrite,Php,Regex,.htaccess,Redirect,Mod Rewrite,在通过脚本查看图像后,我想获取查看器的HTTP\u USER\u AGENT 这是目录 /www |-- /other.org |-- /example.com |-- /sub |-- .htaccess |-- agentlog.php |-- /i |-- photo.png 我已将图像文件和脚本分离到不同的文件夹。所有文件的根目录都位于域的子目录中。所以http://example.com/sub,图像存储

在通过脚本查看图像后,我想获取查看器的
HTTP\u USER\u 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\u USER\u AGENT
,并将其存储在数据库中,还通过一个子域显示图像,该子域不会被
.htaccess
重定向

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

.htaccess
将检查
中是否存在
photo.png
http://example.com/sub/i/photo.png
,并将请求重定向到名为
agentlog.php的文件
at
http://example.com/sub/agentlog.php
如果图像存在,则
agentlog.php
将记录并保存到数据库中,并通过
http://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
,但我不知道要编写什么其他规则才能使其正常工作


如果需要进一步的信息,我很乐意补充。我如何解决这个问题?或者有什么方法可以做到这一点?我已经输入了内容标题,但不确定它为什么不起作用。

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

编辑

试试这个:-

        $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
一切都很好,除了图像没有显示出来, .htaccess重定向。它表明

�巴布亚新几内亚IHDR�^���� �IDATx��ݯ��U���............

这是一个标题错误(mime类型错误)-文本/普通而不是图像/

无论如何,您的.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);
?>


我有一个请求-为什么不将
readfile(“url”)
更改为
readfile(“文件路径”)
?请尝试一下,因为我以前从未使用readfile作为URL,尽管文档提到这是可能的。@LionelChan您好,我尝试过了,但没有区别,我仍然得到了图像的word版本。您可以从PHP代码打印
$\u SERVER[“document\u ROOT”]
,然后告诉我您的想法吗get@anubhava你好文档根就像文档根一样:/home/user/public\u html/sites/example.com然后条件应该是
RewriteCond%{document\u root}/sub/i/$1-f
Hi没有空格或换行符,我省略了结束标记,没有区别,图像仍然不会显示。附加:检查这个-@LionelChan Hi,我已经尝试过了,还是一样。我还是不知道是什么问题。谢谢!!我发现我的另一个SQL文件有一个链接到它的空白!让我想了这么久!!我移除了它,它开始工作了@拜托,我很高兴你找到了。
<?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);
?>