-1

アドレス バーの画像リンクを新しい短いリンクに書き換えたい.. 私の Web サイトには、さまざまな場所に多数の画像が含まれています。だから、同じディレクトリにあったすべての画像を表示したい:

経験値:

domain.com/dir1/dir2/img1.jpg => domain.com/img1.jpg

domain.com/dir/img2.gif => domain.com/img2.gif

domain.com/dir1/dir2/dir3/dir4/img3.png => domain.com/img3.png

出来ますか ?!または、index.php を使用してメイン ディレクトリにすべての画像をアップロードする必要がありますか??

4

1 に答える 1

0

ルートからすべてのイメージを に書き込む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.
于 2013-01-17T00:32:02.910 に答える