Назад | Перейти на главную страницу

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(/.*)?$ в это место

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