所以这个问题已被提出,但在其他问题中,用户希望阻止apache列出目录。基本上我有一个登录文件交换系统的网站,如果用户登录,那么他可以访问其他用户上传的内容。以下是我阻止用户访问我网站的某些部分的方法
function loggedin()
{
if (isset($_SESSION['myusername']) || isset($_COOKIE['myusername']))
{
return true;
}
else {
return false;
}
}
我使用此代码显示上传文件夹中的所有目录:
<?php
$dir = "./uploads";
$list = scandir($dir); /* This function sorts dirs */
$list = array_diff($list,array(".","..","index.php"));
echo "<ol>";
foreach ($list as $file)
{
if (!is_dir($file)) echo "<li><a href='https://rye-high.ca/Rye High/$dir/$file'>$file</a></li>\n";
}
echo "</ol>";
?>
现在为了简单起见我允许apache使用Options Indexes FollowSymLinks
列出目录,因为我喜欢apache如何自动执行并阻止我编写可能在php中破坏的内容。
我的问题:知道文件名/文件夹名称的用户可以直接访问文件(和目录)而无需登录系统(即mysite.ca/Rye High / uploads / ACC 100 /。我想通过仍然保持选项索引打开,以便apache可以将文件列出到实际登录的用户。
怎么做? .htaccess文件?
我考虑过编辑用于列出目录的默认apache模板代码,但是我将来可能不希望其他虚拟主机(全局)。
答案 0 :(得分:0)
您可以使用apache的Basic Auth模块(http://linuxzoo.net/page/tut_authapache.html),并且您可以使用PHP生成.htpasswd文件 - http://www.htaccesstools.com/articles/create-password-for-htpasswd-file-using-php/。
一个好方法是使用像php文件管理器这样的东西:
或者您可以在用户成功登录后设置Cookie,然后在htaccess中检查Cookie:https://stackoverflow.com/questions/19382160/htaccess-compare-cookie-value-and-redirect-if-evaluation-returns-true-false。 这个问题是,知道cookie值的人将能够在不首先登录的情况下浏览您的文件。