Nginx reescreve o erro 404 da subpasta da regra

1

Eu não consigo descobrir como devo configurar meu arquivo index.php com as regras de reescrita do Nginx que funcionará como no exemplo abaixo.

Se eu visitar o URL, ele me dará um erro 404 que não foi encontrado no echo 'olá'.

URL:

http://www.example.com/directory/sub-directory/

/ subdiretório / de determinada URL, na verdade não é diretório real dentro de / diretório /. Se eu visitar o URL, eu tenho erro 404 - o que é real ok, mas / sub-diretório / é amigável URL (sem consulta? Argumento = valor).

/ sub-directorio / não é um valor fixo (neste exemplo é), pode ser / sub-directorio-novo / - depende.

Portanto, para qualquer valor dentro de / value / after / directory / in URL, como não consigo receber um erro 404 se eu visitar esse tipo de URL?

Index.php em / directory /:

$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$wanted = "sub-directory";

$tokens = explode('/', $actual_link);
$result =  $tokens[sizeof($tokens)-2]; // result is "sub-directory"
if($wanted == $result) {
    echo "hello";
}

Nginx:

location /directory {
    try_files $uri $uri/ /directory/$uri;
    error_page 404 =200 /directory
}

Devo adicionar alguns argumentos para a regra, como: location / directory $ 1? Em caso afirmativo, qual e como fazê-lo funcionar?

Alguém tem algumas ideias?

Obrigado por compartilhar e informações!

    
por Fritex 01.04.2016 / 00:35

1 resposta

1

A maneira usual de fazer URLs amigáveis no nginx é assim:

location /directory {
    try_files $uri $uri/ @rewrites;
}

location @rewrites {
    rewrite ^ /directory/index.php;
}

Essa configuração assume que a diretiva root aponta para o diretório em que /directory está localizado.

Então, aqui o nginx tentará primeiro se o arquivo ou diretório existir no sistema de arquivos real. Se o arquivo não existir, ele encaminha a solicitação ao seu arquivo PHP. Naturalmente você precisa ter seu bloco de processamento PHP configurado corretamente no nginx.

    
por 01.04.2016 / 08:18