Apache2 PHP如何通过.htaccess重写直接下载链接实现下载日志统计
实现方案
完全可以通过Apache的mod_rewrite模块实现你需要的直链重写效果,操作步骤如下:
前置检查
- 确保Apache已开启
mod_rewrite模块 - 确保下载目录的Apache配置中
AllowOverride参数设置为All,允许.htaccess文件生效
配置重写规则
在你的下载文件根目录(即示例中的/files/目录)下新建.htaccess文件,写入以下内容:
RewriteEngine On # 跳过对download.php本身的重写,避免死循环 RewriteRule ^download\.php$ - [L] # 匹配所有真实存在的文件,内部重写到download.php处理 RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^(.*)$ download.php?file=$1 [L]
规则说明
- 上述配置属于内部重写,用户浏览器地址栏不会发生变化,不会影响原有直链的使用体验
- 重写后你可以直接在
download.php中通过$_GET['file']拿到用户请求的文件路径,正常执行日志记录、文件返回逻辑即可
注意事项
- 务必在
download.php中做好参数校验,过滤../等特殊字符,限制只能读取当前下载目录下的文件,避免出现任意文件读取漏洞 - 如果你的下载文件包含多级子目录,规则可以正常适配,例如用户访问
/files/soft/v1/install.exe会自动重写为download.php?file=soft/v1/install.exe,你只需要在PHP中对应处理路径即可 - 如果你需要让用户地址栏同步跳转,可以将规则最后的
[L]修改为[R=302,L],一般下载场景不建议使用跳转,会影响包管理器的兼容性
内容的提问来源于stack exchange,提问作者notrespire
相关产品推荐
相关产品推荐

