You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Htaccess使GIF图片请求触发PHP访问计数器脚本执行

解决方案

1. 修复.htaccess 500错误及规则逻辑

你触发500错误的核心原因有两个:

  • RewriteRule ^output.gif$ output.php[R=301,L] 中 output.php 和规则标识 [R=301,L] 之间缺少空格,语法错误直接触发服务端报错
  • 重复声明RewriteEngine On属于冗余配置,虽然不直接报错但不必要

另外你用R=301永久重定向的逻辑是错的:301会被浏览器长期缓存,后续用户请求output.gif时不会再请求你的服务端,直接用本地缓存的重定向结果,计数会完全失准。你需要的是内部重写(用户侧看不到跳转到php的过程,直接返回图片内容),不要用重定向标识。

修正后的.htaccess规则如下:

RewriteEngine On
Options +FollowSymlinks
RewriteBase /
# 内部重写:所有请求output.gif的流量静默交给output.php处理,不触发跳转
RewriteRule ^output.gif$ output.php [L]

2. 修正PHP脚本逻辑

你现有脚本的问题是:会把生成的gif写入本地文件,还输出了<img>标签,跨域嵌入时返回的是HTML内容而非图片资源,会显示裂图。需要改为直接输出图片二进制流,设置正确的响应头,不需要写本地文件,也不需要输出HTML内容。

修正后的output.php代码如下:

<?php
// 1. 计数逻辑
$file = 'visitas.txt';
// 兼容文件不存在的场景
if (!file_exists($file)) {
    file_put_contents($file, '0');
}
$views = intval(trim(file_get_contents($file)));
$fdata = $views + 1;
file_put_contents($file, $fdata);

// 2. 生成数字对应图片
$sources = str_split((string)$fdata);
array_walk($sources, function(&$item) {
    $item .= '.png';
    // 兼容数字图片不存在的场景,避免报错
    if (!file_exists($item)) {
        $item = '0.png';
    }
});

$stack = new Imagick();
foreach ($sources as $source) {
    $stack->addImage(new Imagick($source));
}
$montage = $stack->montageImage(new ImagickDraw(), '10x1', '40x33', 0, '0');

// 3. 输出图片响应头,直接返回gif二进制流
// 允许跨域加载,避免其他域名嵌入时被拦截
header('Access-Control-Allow-Origin: *');
// 设置返回内容类型为gif图片
header('Content-Type: image/gif');
// 禁止浏览器缓存图片,确保每次加载都请求服务端更新计数
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');

// 直接输出图片内容,不需要写入本地文件,也不需要输出img标签
echo $montage->getImagesBlob();
exit;
?>

3. 额外注意事项

  • 确保visitas.txt文件所在目录有读写权限,Linux环境可执行chmod 666 visitas.txt设置权限
  • 确保你用到的0-9的数字png图片都放在脚本同级目录,命名为0.png到9.png
  • 其他站点嵌入时直接用<img src="https://你的域名/output.gif" />即可,每次加载都会触发计数逻辑

内容的提问来源于stack exchange,提问作者Sophie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:00:01