.htaccess RewriteRule在图像加载时执行php脚本

时间:2016-06-02 19:46:35

标签: php .htaccess laravel mod-rewrite

所以我一直致力于在laravel项目中创建一个webbug,它可以在加载任何图像时记录基本信息。但是,我的.htaccess文档似乎没有正确识别我的扩展,因为它没有执行我的脚本。我知道我的脚本就像我运行它时一样,数据库获得新的输入。脚本本身并没有被调用。我正在使用Blade Templates创建在路由资源上执行的视图,或者在这种情况下测试特定路径的视图。

routes.php文件

Route::resource('identifyVerification', 'PhishingController');
Route::get('/breachReset','PhishingController@breachReset');
Route::get('/breachReset/verifyUser', 'PhishingController@breachVerify');

Route::get('/path/to/sec_question.png','PhishingController@imageReturnTest');

我正在使用的测试路线是最后一个,@ imageReturnTest。它引用了PhishingController中的一个函数,其定义如下所示。它正在我公共目录中的img目录中打开一个测试图像。

public function imageReturnTest() {
        $path = './img/sec_question.png';
        $fp = fopen($path,'rb');
        header('Content-Type: image/png');
        header('Content-Length: ' . filesize($path));
        fpassthru($fp);
        exit;
    }

加载此图片时,我的.htaccess文件会看到加载了扩展名为.png的图片,然后运行重定向来执行webbug_test.php页面。下面是我在laravel里面的.htaccess文件。我的规则不仅应该在PNG上执行,还应该执行任何图像(JPEG,PNG,GIF等 - 可以根据需要添加扩展名)。正如您所看到的,我尝试过通过StackOverflow和其他网站描述如何设置透明Webbug的解决方案。两者都没有奏效。

的.htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # My new rule to execute webbug
    RewriteRule ^(.*).(png|jpg|gif)$ webbug_test.php

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

</IfModule>

我也尝试过.htaccess

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} .*jpg$|.*gif$|.*png$ [NC]
RewriteRule (.*) /webbug_test.php

下面是我应该通过.htaccess调用的webbug_test.php脚本。正如我所说,我可以通过IDE测试程序运行此页面,它将运行它的SQL执行并将适当的信息插入数据库,以便即时执行。但是,在图像加载时不会调用它。

webbug_test.php

<?php

$db = new mysqli('host', 'username', 'password', 'database');

if (mysqli_connect_errno()) {
echo 'Error: Could not connect to the database..';
exit;
}

$ip = $_SERVER['REMOTE_ADDR'];
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$reqpath = $_SERVER['REQUEST_URI'];
$browseragent = $_SERVER['HTTP_USER_AGENT'];
$date = date("Y-m-d");
$time = date("H:i:s");
print "vars created";
$sql = "INSERT INTO database.table (id,ip,host,
   browser_agent,req_path,access_date,access_time) VALUES 
   (null,'$ip','$host','$browseragent','$reqpath','$date',
   '$time');";
print "sql executed";
$result = $db->query($sql);

$result->free();
$db->close();

header( 'Content-type: image/jpg' );
?>

SQL结果图片
SQL Results

所有这些都说明了,我不确定如何继续推进这种重定向。我已经看过执行一个名称策划,这会使这个脚本认为它是一个图像,然后执行RuleRewrite执行.jpg作为PHP脚本,但是,我仍然希望显示所请求的图像,我不想要格式化我的脚本以接收管道数据并在SQL插入的顶部返回请求的图像。关于我可能做错了什么或者如何更好地实现全球webbug的任何反馈?

1 个答案:

答案 0 :(得分:0)

您可以创建一个动态的php文件来提供图像并将其他详细信息记录到数据库中。 例 <img src="image.php?name=abc.jpg />并从image.php。

中记录您的数据