Nginx проверяет несколько каталогов, если файл существует, перенаправление в этот каталог

Используйте что-то вроде 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 (/.*)? $ в это место

1
задан 27 August 2016 в 06:02
1 ответ

Это, вероятно, проще всего сделать с несколькими блоками 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 соответствовал местоположению?

2
ответ дан 3 December 2019 в 20:35

Теги

Похожие вопросы