Php 如何使用.htaccess和登录页保护文件?

Php 如何使用.htaccess和登录页保护文件?,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我在我的服务器上托管了一些我不想公开的文件(如照片、音乐等)。因此,我构建了一个请求OTP的PHP表单,如果代码正确,它将显示“OK”。禁止访问PHP文件并不难,但如何才能对任何其他文件类型进行访问 例如,我希望当用户输入时: www.example.net/private.png .htaccess将转到: www.example.net/access.php 在用户不知道的情况下,比如AJAX 如果文件返回true,则会向用户显示www.example.net/private.png中的

我在我的服务器上托管了一些我不想公开的文件(如照片、音乐等)。因此,我构建了一个请求OTP的PHP表单,如果代码正确,它将显示“OK”。禁止访问PHP文件并不难,但如何才能对任何其他文件类型进行访问

例如,我希望当用户输入时:

www.example.net/private.png
.htaccess
将转到:

www.example.net/access.php
在用户不知道的情况下,比如AJAX

如果文件返回
true
,则会向用户显示
www.example.net/private.png
中的内容。如果它返回他
false
,它将向他显示此URL中的表单:

www.example.net/login.php?url=private.png
成功登录后,PHP会将他重定向到:

www.example.net/private.png
再说一遍。但是现在,由于他已经登录,
www.example.net/access.php
将返回他
true


要做到这一点,应该在
.htaccess
文件中写入什么?

要使用PHP保护文件访问,请将文件放在web无法直接访问的私有目录中

创建允许用户登录的PHP脚本

login.php
当登录用户请求www.youserver.com/guard.php/image/secret.jpg时,他/她将收到图像文件:/home/tester/guard/image/secret.jpg

进一步的变化 将其添加到.htaccess文件中(确保在Apache web服务器中启用了mod_rewrite)

.htaccess

RewriteEngine on
RewriteRule ^(video|music|image)/(.*)$ guard.php/$1/$2
如果您的音乐文件位于私有目录中的
music
目录中,则只有登录的用户才能访问位于


视频和图像也可以通过类似方式访问。

是什么阻止了您仅使用PHP进行访问?将图像保存到不可访问的文件夹中,或者仅使该文件夹拒绝所有访问,并从可访问的文件夹中为PHP文件中的所有图像提供服务器@有人编辑了这篇文章。图像只是一个示例,它可以是css文件、电影等。您忽略了它可以是任何类型的文件的事实,编辑是为了提高问题的可读性,因为它没有任何未提及的更改。您可以使用PHP访问任何内容,而不仅仅是图像。@Prix那么如何使用HTACCESS重定向到
access.PHP?path=THEPATH
?非常感谢。现在只剩下
HTACCESS
文件了。如何在不更改URL的情况下从
www.example.net/music/song.mp3
重定向到
www.example.net/guard.php
?我添加了一个
进一步更改
部分来回答您的问题。问题是,我希望它影响放置htaccess文件的文件夹中的任何文件和子文件夹。这意味着它可以是(htaccess处于隐藏状态)
www.example.net/private/hidden/me.png
,也可以是
www.example.net/private/hidden/germany/2014/berlin/panoramas/brows.html
。视图文件与htaccess-
隐藏的文件位于同一文件夹中。您还可以访问文件夹中文件夹中文件夹中文件夹中的文件。。。。例如,如果您在/home/tester/guarded/image/germany/2014/berlin/panoramas/brows.html中放置了一个文件,您可以在www.yourserver.com/image/germany/2014/berlin/panoramas/brows.htmlThe name
image
video
music
上访问它。。它可以是任何东西。您可以将所有受保护的文件放在一个名为
hidden
($private_dir=“/home/tester/hidden”)的私人文件夹中,并将.htaccess更改为:RewriteRule^hidden/(.*)$guard.php/$1 URL将是:www.example.net/hidden/germany/2014/berlin/panoramas/brows.html
<?PHP
session_start();

if(!isset($_SESSION['access_allowed'])){
    header("HTTP/1.0 401 Unauthorized"); // or redirect to the login page
    exit;
}

$private_dir = "/home/tester/guarded";
$filename = $private_dir.$_SERVER['PATH_INFO'];

if(!file_exists($filename)) {
    header("HTTP/1.0 404 Not Found");
    exit;
}

// $mime_type = "application/octet-stream";

// Finding MIME type using Fileinfo extension
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $filename);
finfo_close($finfo);

header('Content-Type: '.$mime_type);
header('Content-Disposition: inline; filename='.basename($filename));
header('Content-Length: ' . filesize($filename));
readfile($filename);
exit;
?>
RewriteEngine on
RewriteRule ^(video|music|image)/(.*)$ guard.php/$1/$2