Конфигурация nginx - перенаправление, если файл существует

I ' "если файл / каталог не существует, перепишите запрос для api.php? rquest = $ uri"
«если файл / каталог существует, перепишите запрос для api.php»

Я попытался воспроизвести это в nginx, но столкнулся с проблемой. Я создал директиву местоположения с помощью

location / {
    # if the file or folder doesn't exist add it as arguments to api.php
    try_files $uri $uri/ /api.php?rquest=$uri&$args;

    index api.php;
}

, и все, что я хочу сделать, это просто перейти на статическую страницу index.html где-нибудь, если файл / каталог действительно существует.

Я пробовал оператор «if» на уровне сервера с перезаписью

if (-e $request_filename){
    rewrite ^(.*)$ /api.php break;
}

, но это нарушает другие допустимые директивы местоположения.

Как мне это сделать: если файл / каталог действительно существует, перенаправить на статическую html-страницу

---------------- Обновление ------------- -

В итоге я получил что-то вроде

server {
    ...

    root  /home/ballegroplayer/api/public;
    index index.php index.html index.htm;

    try_files $uri $uri/ /api.php?rquest=$uri&$args;

    if (-e $request_filename){
        rewrite ^(.*)$ /api.php last;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
}

В конечном счете, в операторе «if» мы не можем перенаправить на статический файл, потому что после успешного выполнения директивы «try_files» мы перенаправляемся на api.php , который действительно существует и вызовет срабатывание оператора if, и мы всегда получим статическую страницу html.

0
задан 29 October 2017 в 05:56
1 ответ

Я думаю, что использование last вместо break решает проблему, поскольку это заставляет nginx не повторно обрабатывать местоположения с перезаписанным URL-путем.

0
ответ дан 5 December 2019 в 07:17

Теги

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