Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果文件名包含符号字符,Nginx secure_link返回403_Php_Nginx - Fatal编程技术网

Php 如果文件名包含符号字符,Nginx secure_link返回403

Php 如果文件名包含符号字符,Nginx secure_link返回403,php,nginx,Php,Nginx,这是我用于生成安全链接的php代码: $file = /dl/file.rar; $uri_prefix = "example.com"; $secret_word = "my_secret"; $time = time()+86400; $md5 = base64_encode(md5($secret_word.$file.$time, true)); $md5 = strtr($md5, '+/', '-_'); $md5 = str_replace('=', '', $md5); $url

这是我用于生成安全链接的php代码:

$file = /dl/file.rar;
$uri_prefix = "example.com";
$secret_word = "my_secret";
$time = time()+86400;
$md5 = base64_encode(md5($secret_word.$file.$time, true));
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
$url= $uri_prefix.$file.'?key='.$md5.'&e='.$time;
我的nginx.conf是:

location ~\.(mkv|zip|MP4|Mp4|mp4|rar)$ {
        secure_link $arg_key,$arg_e;
        secure_link_md5 "my_secret$arg_e";

        if ($secure_link = "") {
                return 403;
        }
        if ($secure_link = 0) {
                return 410;
        }
        limit_rate_after 8m;
        limit_conn conn_limit_per_ip 2;
        limit_req zone=req_limit_per_ip burst=5 nodelay;
        limit_rate 600k;
}
它的工作很好,但如果文件名有象Nginx return403这样的符号字符;为什么? 文件名示例
根据NGINX社区的说法,if是邪恶的,不应该使用。

你可能希望调查这类事情


OpenResty在NGINX之上利用了LUA脚本,在许多情况下会填补很多空白。

在计算之前尝试对文件名进行URL编码md5@AlexeyTen我试过了,但没有成功,我被替换为%28,也被替换为%29,但结果没有改变你为什么删除=?@AlexeyTen实际上我是通过搜索找到这段代码的,我不知道这个问题解决了吗?