Используйте что-то вроде 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
, которые могут с ним конфликтовать. Подробнее см. этот документ .
РЕДАКТИРОВАТЬ: Может быть, это выглядит лучше в качестве параметров для директивы 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
соответствовал местоположению?