禁止访问目录,但只有一个带有.htaccess 的子目录除外

禁止访问目录,但只有一个带有.htaccess 的子目录除外

我在文件系统上有以下目录结构:

/users/[uid1]/

/users/[uid2]/等等(UID 部分在 url 中是动态的,例如/users/abc123//users/def456/

在 uid-dirs 里面我还有一些子目录和文件例如: images-dir another-dir file1 file2

我还有一个.htaccess 文件:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]

因此,仅当请求的文件在文件系统中不存在时,我才会重写对 index.php 的每个请求以进行路由。

我可以以某种方式禁止访问 /users/[uid]/*exceptimages-dir吗?

例如,允许:

/users/123abc/images-dir/some-image.jpg

并拒绝:

/users/123abc/another-dir

/users/123abc/file1

我需要拒绝对此子目录的直接访问,并且如果有人试图获取禁止文件的内容,我需要向 index.php 发送请求

可以使用.htaccess 吗?

谢谢

答案1

.htaccess我假设您在文档根目录中有一个文件。

您可以在现有指令之前执行类似以下的操作:

# If the request maps to a file or directory in the /users/<uid> space
# But is not the "images-dir" then forbid access
RewriteCond %{REQUEST_URI} !^/users/\w+/images-dir/
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^users/\w+/ - [F]

\w+匹配<uid>并且 包括字母数字和下划线字符。如果<uid>遵循特定格式,那么您可以在此处更具体。

如果您仅引用/users/<uid>/...空间中的静态资源(即没有虚拟 URL),那么您可以删除上述文件系统检查,因为您知道每个请求都针对文件系统资源。

相关内容