.htaccessを持つサブディレクトリを1つだけ除いて、ディレクトリへのアクセスを禁止します
ファイルシステムに次のdir構造があります。
/users/[uid1]/
/users/[uid2]/
など(UID部分は、/users/abc123/
またはのようにURLで動的です/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]/*
以外へのアクセスを禁止できますimages-dir
か?
たとえば、次のことを許可します。
/users/123abc/images-dir/some-image.jpg
と拒否:
/users/123abc/another-dir
/users/123abc/file1
このサブディレクトリへの直接アクセスを拒否する必要があり、誰かが禁止されたファイルのコンテンツを取得しようとした場合、index.phpにリクエストを送信したい
.htaccessで行うことは可能ですか?
ありがとう
回答
.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を参照しない場合)、すべての要求がファイルシステムリソースを対象としていることがわかっているため、上記のファイルシステムチェックを削除できます。