【发布时间】:2014-09-18 10:33:31
【问题描述】:
我正在使用 PHP 生成动态图像并使用 .htaccess 重定向到 PHP 脚本以在 HTML-img-tags 中使用这些图像,例如“/path/something.jpg”。
这是我的 .htaccess:
RewriteEngine On
RewriteBase /
RewriteRule ^/?([a-z]+)/(.*)$ /?a=$1&b=$2 [L,NC]
这将使我的 index.php 在 $_GET['a'] 中接收“路径”,在 $_GET['b'] 中接收“something.jpg”。这按预期工作。
现在,用 PHP 创建图像后,图像的输出是这样完成的:
header('Content-type: image/jpg');
header('Content-Disposition: filename="something.jpg"');
echo $binary;
exit;
这也有效,我收到一张图片,浏览器显示它。
但是:每当调用 index.php 以生成图片时编写日志时,我看到它对正在创建的每个图像都调用了 TWICE,我不知道为什么。
似乎使用header() 会使脚本重新启动,因为从脚本中删除header()(并且只打印$binary)将导致脚本只执行一次。
apache-access.log 也显示了第二次调用:
127.0.0.1 - - [18/Sep/2014:12:17:46 +0200] "GET /path/something.jpg HTTP/1.1" 200 19148 "-" "USER_AGENT"
127.0.0.1 - - [18/Sep/2014:12:17:46 +0200] "GET /path/something.jpg HTTP/1.1" 200 19148 "-" "USER_AGENT"
我一直在尝试使用 .htaccess-settings 来防止这种情况:
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
在我的 .htaccess 文件中(如在此处找到:Apache mod_rewrite REDIRECT_STATUS condition causing directory listing),但无济于事。
我也想知道为什么这种行为不会导致无限循环:如果 .htaccess 将请求发送到 index.php,它会执行一个 header() 将再次调用自己,为什么这不会永远持续下去,但只有两次? (在极少数情况下甚至 3 次,但我无法重现此)
非常感谢任何关于为什么会发生这种情况(以及如何解决它!)的提示。该脚本到目前为止工作正常,但我想防止它生成每张图片两次,因为一旦应用程序完成,我预计会有大量服务器负载。
【问题讨论】:
标签: php apache .htaccess mod-rewrite redirect