是的,这是可能的。您可以在 apache 中使用重写模块。所以你可以说对于所有 (mp3) 文件,服务器不应该返回 mp3 文件,而是运行一个 php 文件/脚本来执行你的查询并返回 mp3 文件。
这可能会对您有所帮助:http://www.workingwith.me.uk/articles/scripting/mod_rewrite
在您的 .htaccess 文件中:
RewriteEngine on
RewriteRule ^\.mp3$ index.php [L]
这会将所有以 .mp3 结尾的链接发送到 index.php(实际上它仍然是同一个链接,但 index.php 将被执行)
您还有其他选择:
RewriteRule ^.*/(\w)*\.mp3$ index.php?filename=$1 [L]
这将使用带有文件名的 GET 可验证文件名执行 index.php
例如。 $_GET['filename'] = "filename"(当文件:filename.mp3)
在 index.php 中让用户下载 mp3 文件(见:Can I serve MP3 files with PHP?):
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
header('Content-length: ' . filesize("[file location eg: /home/files/sometrack.mp3]"));
header('Content-Disposition: attachment; filename="sometrack.mp3"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
readfile("[file location eg: /home/files/sometrack.mp3]");
exit();
您可以使用以下代码动态地执行此操作:
$fileName = $_GET['filename']."mp3"; //we stripped .mp3 in the apache rewrite (might not be so smart)
$fileLocation = "/your/location/".$filename;
header("Content-Transfer-Encoding: binary");
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
header('Content-length: ' . filesize($fileLocation));
header('Content-Disposition: attachment; filename="'.$fileName.'"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
readfile($fileLocation);
exit();
您可以通过以下方式访问请求的链接:
$_SERVER['REQUEST_URI'];
或新的(生成的网址):
$_SERVER['REDIRECT_URL'];