使用htaccess记录外部CDN缓存图片文件名时的异常问题求解
特定CDN请求图片文件名记录htaccess配置问题解决方案
问题根因
你当前的配置会触发内部重定向循环:
- 首次匹配到Photon的UA时,会把
example.jpg的请求重写到log.php?image=example.jpg - 内部重定向后Apache会重新执行
.htaccess的 rewrite 规则,第二次匹配时请求路径已经变成log.php,且UA依然是Photon/1.0,就会再次重写为log.php?image=log.php,最终你拿到的参数就是log.php
修复方案
需要新增规则排除log.php自身的请求,避免循环重写:
RewriteCond %{REQUEST_URI} !/log\.php$ RewriteCond %{HTTP_USER_AGENT} Photon/1.0 RewriteRule ^(.*)$ log.php?image=$1 [L]
如果上述配置仍有问题,可以用END标记代替L标记,直接终止所有rewrite流程,彻底避免循环(仅支持Apache 2.4及以上版本):
RewriteCond %{REQUEST_URI} !/log\.php$ RewriteCond %{HTTP_USER_AGENT} Photon/1.0 RewriteRule ^(.*)$ log.php?image=$1 [END]
可选优化
如果只需要记录图片类请求,可以增加后缀匹配规则,减少不必要的规则触发:
RewriteCond %{REQUEST_URI} !/log\.php$ RewriteCond %{HTTP_USER_AGENT} Photon/1.0 RewriteRule ^(.*\.(jpg|jpeg|png|gif|webp))$ log.php?image=$1 [END]
内容的提问来源于stack exchange,提问作者user1413341
相关产品推荐
相关产品推荐

