Nginx remove caracteres da variável

2

Basicamente, o que eu quero fazer é colocar a URL solicitada em uma variável e, em seguida, remover um caractere (como /) e obter uma nova variável.

Estou tentando implementar barras no final da URL; Isso funciona, mas eu quero fazer isso para todos os arquivos:

location /examplehtmlfile/ {
   try_files = $uri $uri/ examplehtmlfile.html
}

Caso contrário, se eu adicionar uma barra no final, ele produzirá um erro 404.

Então, o que eu quero fazer é adicionar à diretiva try_files (para o principal / local) algo assim:

try_files = $uri $uri/ /$uriwithoutslash.html /$uriwithoutslash.php

Obrigado

    
por BusinessGuy 30.01.2016 / 12:15

2 respostas

1

Você precisa reescrever a variável $uri se ela contiver uma barra à direita. Essa é uma reescrita interna para não afetar a URL como aparece para seus clientes.

location ~ ./$ { rewrite ^(.+)/$ $1 last; }

Sua localização principal só pode testar a existência de conteúdo estático. Os arquivos PHP precisam ser manipulados em um bloco de localização diferente.

location / {
    try_files $uri $uri.html $uri/index.html @php;
}

A existência de arquivos PHP pode ser testada no local indicado:

location @php {
    try_files $uri.php $uri/index.php =404;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass ...;
}

O =404 pode ser substituído por um URI padrão, por exemplo: /index.php

Uma diretiva root também é necessária, mas uma diretiva index não é consultada.

EDITAR:

Se você precisar dar suporte a URIs com a extensão .php também, você pode reescrevê-los e adicionar a barra ou duplicar o bloco de localização do PHP. Qualquer um:

location ~ \.php$ {
    rewrite ^(.*)\.php$ $1/ last;
}

Ou:

location ~ \.php$ {
    try_files $uri =404;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass ...;
}
    
por 30.01.2016 / 14:36
0

Obrigado ao @RichardSmith, foi resolvido!

Aqui está minha configuração final: link

    
por 31.01.2016 / 16:33

Tags