我正在处理一个遗留代码库,它有三个不同的图像文件夹。图像可以以非常随机的方式存在于三个文件夹中的任何一个中。
我最初尝试在PHP中检查文件是否存在;然而,图像显示在很多地方,我希望我可以用htaccess文件实现相同的功能。但是,到目前为止还没有运气。
这是我到目前为止所得到的:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^Folder_1/(.*)$ Folder_2/$1 [L,NC]
RewriteRule ^Folder_2/(.*)$ Folder_3/$1 [L,NC]
我想要发生的是对于任何不存在的图像请求,请检查其他两个文件夹,以任何顺序存在。所以,如果有人请求Folder_3 / image.png,它会检查Folder_1 / image.png,然后检查Folder_2 / image.png
有关如何编写htaccess文件的任何建议吗?
答案 0 :(得分:0)
使用[N]
标志再次从顶部开始重写。
答案 1 :(得分:0)
如果你无法根据Ignacio's suggestion让它工作,我会建议这样的事情,虽然有点复杂但似乎有用:
RewriteEngine on
# If the request points to a real resource, just end here
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]
# Check the other two directories
# First, figure out which directory we're currently in and capture the rest
RewriteCond $1|Folder_1|Folder_2|Folder_3 ^([^\|]+)\|(.*?)\|?\1\|?(.*)$
# Now break them up into two folders
RewriteCond %2|%3 ([^\|]+)\|([^\|]+)
# Check the first alternate folder to see if it exists there
RewriteCond %{DOCUMENT_ROOT}/%1/$2 -f [OR]
# If not, make the second option move to the first back reference
RewriteCond %2 ^(.*)$
# Check the second alternate folder to see if it exists there
# (or check the first option again if it succeeded..we could condition
# this out in that case, but I don't know if it's worth adding)
RewriteCond %{DOCUMENT_ROOT}/%1/$2 -f
# If so rewrite to the correct alternate folder
RewriteRule ^([^/]+)/(.*)$ /%1/$2
答案 2 :(得分:0)
RewriteCond
directive只属于下一个RewriteRule
directive。这意味着您需要将这些RewriteCond
指令放在每个RewriteRule
:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^Folder_1/(.+) Folder_2/$1 [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^Folder_2/(.+) Folder_3/$1 [L,NC]
顺便说一下:你的第二个条件%{REQUEST_FILENAME} !-d
可能没用,因为它只测试现有目录。