ルートからすべてのイメージを に書き込むdir
には、次を使用します。必要に応じて、他の画像拡張子をグループに追加でき(jpe?g|png|gif)
ます。すべての画像を移動できる場合は、これを使用してくださいdir/
RewriteEngine On
RewriteRule ^/?([^.]+)\.(jpe?g|png|gif)$ dir/$1.$2 [L]
元のアイデアを機能させるために、私が考えることができる唯一の方法はRewriteCond
、指定された画像のすべての可能なディレクトリをチェックする a を使用することです。いずれかが一致するまで、各ルールを通過します。
RewriteEngine On
# Does the file exist in dir1? (-f)
RewriteCond dir1/${REQUEST_FILENAME} -f
RewriteRule ^/?([^.]+)\.(jpe?g|png|gif)$ dir1/$1.$2 [L]
# Does it exist in dir1/sub1 ?
RewriteCond dir1/sub1/${REQUEST_FILENAME} -f
RewriteRule ^/?([^.]+)\.(jpe?g|png|gif)$ dir1/sub1/$1.$2 [L]
# Does it exist in dir2/sub1/sub2 ?
RewriteCond dir1/sub1/${REQUEST_FILENAME} -f
RewriteRule ^/?([^.]+)\.(jpe?g|png|gif)$ dir2/sub1/sub2/$1.$2 [L]
# And on and on for each directory which may have images....
明らかに、これは容易に保守できません。また、ディレクトリが 5 ~ 6 個を超えると、完全に手に負えなくなります。Apache を再帰的に検索する別の方法がわかりません。
コメント後の更新:
次のように、最初に任意のディレクトリの画像を強制的にリダイレクトして、ブラウザ内のルートに表示する必要がある場合:
example.com/uploads/0cfa524e_201446.jpg --> example.com/0cfa524e_201446.jpg
上記のルールの前に、次のルールを配置します。リダイレクトを強制し、リダイレクト後、後続のルールの 1 つが一致してファイルを提供する必要があります。
# Redirect any image file which is requested _inside_ a directory to appear at the root
RewriteRule ^/?.+/([^.]+)\.(jpe?g|png|gif)$ http://%{HTTP_HOST}/$1.$2 [L,R=301]
#... then add all the rules from above.