NGINX: Script primário desconhecido - ao chamar um URL dinâmico com prefixo do controlador

1

Estamos enfrentando um problema e não podemos corrigi-lo. No momento, podemos executar nosso aplicativo conforme o esperado - a URL de SEO é exibida como um recurso e está sendo reescrita para index.php . O problema é que temos um padrão de URL adicional como:

  • /controllerPrefix/a-param.php
  • /controllerPrefix/an-other-param.php
  • /controllerPrefix/an-other-other-param.php

... que precisamos reescrever para index.php também. Não conseguimos escrever este URL dinâmico de URL que termina em .php . Por favor, note que não existem arquivos PHP físicos, por exemplo, a-param.php - > é um padrão dinâmico que termina em .php . Infelizmente, a saída no navegador é File not found. O seguinte erro é registrado em nginx 1.10 :

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream...

- > 404 não encontrado

Configuração NGNIX:

server {
    listen 80;
    index index.php index.html;
    root /var/www/public;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

Como reescrever este URL dinâmico que termina em /controllerPrefix/*.php a index.php ?

    
por lin 03.05.2018 / 12:59

1 resposta

2

Você tem duas opções:

Ou 1) redirecionar todos URIs que terminam com .php a /index.php , se não houver arquivo de script correspondente - adicione uma instrução try_files ao bloco location ~ \.php$ existente (consulte < href="http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files"> este documento para detalhes):

location ~ \.php$ {
    try_files $uri /index.php?$args;
    ...
}

Ou, 2) URIs de redirecionamento que começam com /controllerPrefixng a /index.php - adicione um novo bloco location (consulte este documento para detalhes):

location ^~ /controllerPrefix/ {
    rewrite ^ /index.php last;
}
    
por 03.05.2018 / 14:17