我在文件系统上有以下目录结构:
/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),那么您可以删除上述文件系统检查,因为您知道每个请求都针对文件系统资源。