[英]How in .htaccess do I return the file requested but then run a PHP script?
我想做的是收集播客的下载数据。 当请求情节的.mp3文件时,我想将其跟踪到我的Google Analytics(分析)帐户。
我发现了Stack Overflow文章,其中显示了如何将请求重定向到跟踪数据到Google Analytics(分析)的PHP脚本,然后返回.mp3文件,但是,由于某些原因,这在Safari和iOS中会中断(但在Chrome中有效) 。
这是我使用的.htaccess文件:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.*).(mp3) download.php?file=$1.$2 [R,L]
</IfModule>
# END WordPress
因此,我想知道是否有一种方法可以编写我的.htaccess文件脚本以正常返回该文件,然后调用我的download.php
脚本,该脚本将只处理Google Analytics(分析)跟踪,并且无论由于何种原因而失败,它都不会干扰听文件的人。
谢谢!
您可以尝试设置一个脚本,该脚本使用Measurement Protocol (可能使用cURL)将数据发送到Google Analytics(分析)服务器端,并使用适当的标头提供文件,从而不涉及重定向。
的download.php:
<?php
$filename = $_GET['file'];
$data = array('v'=>'1',
'tid'=>'UA-XXXXX-Y',
'cid'=>'555',
't'=>'event',
'ec'=>'sound'
'ea'=>'download'
'el'=>$filename);
$url = 'https://google-analytics.com/collect';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
if(file_exists($filename)) {
header('Content-Type: audio/mpeg');
header('Content-Disposition: filename="test.mp3"');
header('Content-length: '.filesize($filename));
header('Cache-Control: no-cache');
header("Content-Transfer-Encoding: chunked");
readfile($filename);
} else {
header("HTTP/1.0 404 Not Found");
}
另外,您可以尝试使用cron作业脚本来解析apache访问日志,但这似乎占用了内存并且过于复杂。
编辑:我在GAMP代码中添加并更改了语法,使其更加积极
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.