nginx config try_file com uma reescrita condicional baseada em se um arquivo de destino existe [closed]

1

Estou usando uma configuração como mostrada abaixo para redirecionar todos os arquivos não encontrados para o local de fallback único

  location / {
      try_files $uri @missing;
  }

  location @missing {
      rewrite ^(.*)$ /fallback.php last;
  }

Isso está funcionando bem, mas agora tenho um requisito mais complexo, pois preciso efetivamente de um retorno ao meu fallback.

Então - eu preciso estender isso para que, se fallback.php não existir, ele reescreva a fallback2.php

ATUALIZAÇÃO:

Aqui está o resto do meu arquivo de configuração escrito com a linha try_files como sugerido pelo sugerido pelo @ AD7six nos comentários, apenas no caso de haver um problema no manipulador php:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    server_name ~^(?<subdomain>\w*?)?\.?(?<domain>\w+\.\w+)$;

    if ($subdomain = "") {
            set $subdomain "www";
    }

    if (!-d "/home/me/projects/$domain/$subdomain") {
            set $subdomain "www";
    }

    root /home/me/projects/$domain/$subdomain;
    index index.php index.html index.htm;

    location / {
            try_files $uri /fallback.php /fallback2.php;
    }

    location ~ \.php$ {
            try_files $uri $uri/ =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }
}

se eu tiver apenas um local na linha try_files, ele funciona:

try_files $uri /fallback.php;

mas quando eu tenho um segundo local, ele faz o download do fallback.php html em vez de redirecionar

try_files $uri /fallback.php /fallback2.php;
    
por Finglish 06.02.2015 / 10:14

1 resposta

1

location = /fallback.php {
    if (!-e $request_filename) {
        [...]
    }
}

Nota: se você tiver locais de regex para * .php, eles terão prioridade.

    
por 06.02.2015 / 10:57

Tags