仅为php用户htaccess下载文件

时间:2015-02-08 13:41:22

标签: php .htaccess

我怎么能用htaccess这样做呢?

if (url has not parameter ?down=true) 
redirect back
else
do noting
end if

示例

example.com/upload/file.pdf //它不能下载文件

example.com/upload/file.pdf?down=true //必须下载文件

请帮帮我:)

这是我的htaccess文件

RewriteEngine on
RewriteRule ^upload/file/(.*) http\:\/\/www\.example\.org\/down.php?file=$1 [L]

这是down.php页面

<?php
session_start();

if(isset($_SESSION["user_id"])){ 
if(isset($_GET["file"])) $file = mysql_escape_string($_GET["file"]);
$file = "http://www.example.org/upload/file/".$file;
$file = preg_replace("/ /", "%20", $file);

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
//header('Content-Length: ' . filesize($file));
readfile($file);
exit;

}else{
header('Location:login.php');
}
exit();

1 个答案:

答案 0 :(得分:0)

%{QUERY_STRING}中需要RewriteCond变量来检查重定向,如下所示。

RewriteEngine On
RewriteCond %{QUERY_STRING} !(^|&)down=true($|&)
RewriteRule example\.com\/upload\/file\.pdf /index.php [L]

如果您的RewiteCond在查询字符串中有down=true,则不应用以下规则,否则将所有请求重写为/index.php