nginx reescrita sem decodificação url

1

Eu uso reescrever no meu servidor nginx para permitir que URLs como https://www.example.com/en/product/apple.html passem en , product e apple.html para um único script PHP assim:

rewrite ^/([a-zA-Z0-9_\-]+)/([a-zA-Z0-9_\-]+)/(.+)$ /index.php?lang=$1&page=$2&part=$3&$query_string last;

Como você pode ver, a terceira parte, neste caso apple.html , corresponderia a qualquer caractere. Quando esta parte contém caracteres especiais codificados em URL, o nginx parece estar decodificando-os rapidamente, o PHP não seria capaz de detectar se o usuário entrou com o caractere codificado na URL ou decodificado. Por exemplo: /en/product/apples,oranges.html e /en/product/apples%2Coranges.html , o PHP leria apples,oranges.html em ambos os casos.

Para não ter 2 URLs com o mesmo conteúdo: o nginx pode reescrever o URL sem decodificar caracteres especiais / reservados codificados em URL para que o PHP possa determinar se deve redirecionar para o URL não codificado? Ou, melhor ainda, pode ser configurado para redirecionar 301 /en/product/apples%2Coranges.html para /en/product/apples,oranges.html ?

PS. Sei que a URL melhor seria /en/product/apples-oranges.html e esqueça a vírgula. Mas como a Web nos permite formar URLs com caracteres especiais, como vírgula, estou interessado em aprender como lidar com eles.

    
por jonr 18.01.2018 / 20:27

0 respostas