【发布时间】:2021-03-19 03:50:01
【问题描述】:
在我的服务器中,我有一个名为 customers 的文件夹,其中包含子文件夹 [uid] (/customers/[uid]),其中 uid 是分配给每个客户的唯一标识符。每个/customers/[uid]中还有其他文件夹。
其中有一个名为images 的文件夹,顾名思义,其中包含图像。
我想配置 .htaccess 以便用户只能直接访问 /customers/[uid]/images 中的文件,但不允许用户访问任何其他文件夹或任何目录列表。
因为我对.htaccess语法不是很熟悉,所以我尝试在网上搜索了一些答案,但我仍然很困惑。特别是考虑到我的.htaccess 中已经有一个RewriteRule。我不确定在哪里以及如何添加更多来完成我想要的。
这就是我的.htaccess 现在的样子。
DirectoryIndex test.php
<Files "database.ini">
Order Allow,Deny
Deny from all
</Files>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]
</IfModule>
我使用的是 VPS 主机,目录索引默认启用。所以现在如果我尝试访问/customers/user,它会给我一个文件夹列表,我可以继续访问其他文件夹和文件
我尝试将Options -Indexes 放入<IfModule>。之后,我确实不能访问其他目录了,但是我不能再访问任何目录下的任何文件了。
【问题讨论】:
-
仅仅因为你关闭了目录索引,你就不能再访问文件是没有意义的。
-
您能否解释一下“但不允许用户访问任何其他文件夹” 的确切含义?你的意思是,如果我的 uid 是 15,那么我应该被允许访问
/customers/15/中的文件,但不能访问像/customers/123/这样的任何其他子文件夹?此时服务器对您的“uid”一无所知。 -
是的,如果您尝试键入 /customers/15 或任何子文件夹,服务器将拒绝您的访问。但是,您可以访问,例如 /customers/15/logo.png 或 /customers/15/download.pdf(但不能访问 /customers/123/download.pdf)
-
嗯,第一个只是关闭目录索引的情况。您说您在阻止访问 文件 时遇到了什么问题,目前尚不清楚。 “但不是 /customers/123/download.pdf 也不是” - 当您说
uid时,您的意思是您创建的任意 ID,对吗?您不是在谈论操作系统级别的任何系统用户ID吗?如果 web 服务器不知道这个 uid,那么使用 .htaccess 将无法实现