Используйте что-нибудь вроде try_files
как я могу проверить несколько каталогов, чтобы увидеть, существует ли файл? Если файл существует, перенаправьте его в это место, если не отобразите 404.
старая папка ^/wp-content/uploads(/.*)?$
несколько папок для проверки
/sites/default/files$1;
/sites/default/files/testA$1;
/sites/default/files/testB$1;
/sites/default/files/testC$1;
/sites/default/files/testD$1;
пример: если файл присутствует в /sites/default/files/testB$1;
затем переписать ^/wp-content/uploads(/.*)?$
в это место
Это, вероятно, проще всего сделать с несколькими if
блоки, но прочтите это сначала, потому что вы должны использовать только такие операторы, как rewrite ... last
или return
внутри if
блок.
Что-то вроде этого может сработать для вас:
location ~ ^/wp-content/uploads(?<name>/.*)?$ {
if (-f $document_root/sites/default/files$name) {
return 301 /sites/default/files$name;
}
if (...) { ... }
if (...) { ... }
if (...) { ... }
if (...) { ... }
return 404;
}
Вам нужно разместить location
блок над другим регулярным выражением location
блоки, которые могут с ним конфликтовать. Видеть этот документ для подробностей.
РЕДАКТИРОВАТЬ: Может быть, это выглядит лучше как параметры для try_files
директива. Я не знаю, есть ли верхний предел размера try_files
заявление:
location ~ ^/wp-content/uploads(?<name>/.*)?$ {
try_files
/sites/default/files$name
/sites/default/author_images$name
/sites/default/blog_images$name
...
=404;
}
Возможно, вам придется поэкспериментировать с финальным ?
в регулярном выражении. Вы хотите URI /wp-content/uploads
чтобы соответствовать местоположению?