繁体   English   中英

如何在.htaccess中返回请求的文件,然后运行PHP脚本?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM