You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带过期时间的静态视频鉴权访问问题及.htaccess配置求助

问题解决:静态视频文件的签名URL访问控制

核心问题分析

你现有的.htaccess配置无法生效,核心原因是Apache Rewrite规则无法直接计算MD5哈希值,导致签名验证逻辑完全失效;同时规则顺序、参数提取逻辑也存在混乱,无法正确完成过期时间和签名的校验。

正确实现方案

我们需要通过「.htaccess转发请求 + PHP脚本验证」的方式完成控制,以下是完整配置:

1. 修改.htaccess配置

将所有/files/目录下的请求转发到验证脚本,由PHP完成签名和过期时间校验:

RewriteEngine On

# 将/files/下的所有请求转发到验证脚本,保留原查询参数
RewriteRule ^files/(.*)$ /verify.php?file=$1 [L,QSA]

2. 编写验证脚本verify.php

该脚本负责校验URL中的md5和expires参数,验证通过后输出视频文件,否则返回403:

<?php
$secret = 'secret-key'; // 和签名生成代码中的密钥保持一致
$allowedExtensions = ['mp4', 'avi', 'mov']; // 按需添加允许的视频格式

// 获取请求参数
$file = $_GET['file'] ?? '';
$providedMd5 = $_GET['md5'] ?? '';
$expires = $_GET['expires'] ?? 0;

// 1. 校验参数完整性
if (empty($file) || empty($providedMd5) || !is_numeric($expires)) {
    http_response_code(403);
    exit('Forbidden');
}

// 2. 校验文件扩展名合法性
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
if (!in_array($ext, $allowedExtensions)) {
    http_response_code(403);
    exit('Forbidden');
}

// 3. 校验文件是否存在
$filePath = __DIR__ . '/files/' . $file;
if (!file_exists($filePath)) {
    http_response_code(404);
    exit('Not Found');
}

// 4. 校验URL是否过期
if (time() > $expires) {
    http_response_code(403);
    exit('URL已过期');
}

// 5. 校验签名有效性(和生成逻辑完全一致)
$expectedMd5 = md5($file . $expires . $secret);
if ($expectedMd5 !== $providedMd5) {
    http_response_code(403);
    exit('无效的签名');
}

// 验证通过,输出视频文件
header('Content-Type: video/' . $ext);
header('Content-Length: ' . filesize($filePath));
readfile($filePath);
exit;
?>

3. 保留原签名生成PHP代码

你的签名生成逻辑是正确的,无需修改:

function generateSignedUrl($file, $secret, $expiry) {
    $md5 = md5($file . $expiry . $secret);
    return "https://example.com/files/$file?md5=$md5&expires=$expiry";
}
$file = "sample-file.mp4";
$secret = "secret-key";
$expiry = time() + 3600;

$signedUrl = generateSignedUrl($file, $secret, $expiry);
echo "Signed URL: $signedUrl";

关键注意事项

  • 确保verify.php与files目录在网站根目录下,且服务器配置允许PHP脚本读取files目录内的文件。
  • 若需限制特定IP或添加更多校验规则,可在verify.php中扩展逻辑。

内容的提问来源于stack exchange,提问作者nanku singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:17:49