Nginx

Como usar a reescrita de URL

Como usar a reescrita de URL
A reescrita de URL é um processo de alteração da URL de solicitação para algo diferente conforme definido no servidor da web. Nginx usa o módulo ngx_http_rewrite_module, que usa principalmente retorno e diretivas de reescrita para fins de reescrita. Além dessas diretivas definidas neste módulo, a diretiva map, definida em ngx_http_map_module, também pode ser usada para reescrever URLs com facilidade. Este guia pretende explicar cerca de 2 diretivas principais - retornar, reescrever e seus sinalizadores, como eles funcionam e seus aplicativos.

Pré-requisitos

Este guia é otimizado para Nginx 1.0.1 e superior e, portanto, é altamente recomendável atualizar a instância Nginx existente para a versão mencionada ou acima. No entanto, alguns dos comandos, sintaxes podem ainda funcionar para qualquer versão anterior à versão mencionada. Como este guia é sobre a regravação de URL, que é um tópico um pouco avançado, ele assume que o público está ciente do procedimento de instalação do Nginx e, portanto, não é explicado aqui.

Retornar

Return é a diretiva básica que executa a reescrita de URL e é simples de entender. Ele não usa expressões regulares, mas pode incluir variáveis ​​para analisar, capturadas do caminho do bloco de localização. Normalmente, a diretiva de retorno é usada para redirecionar o URL da solicitação para um local diferente e, portanto, costuma usar códigos HTTP como 301 para redirecionamento permanente e 302 para redirecionamento temporário. Os trechos de código a seguir demonstram alguns dos casos de uso da diretiva return.

O seguinte snippet de código redireciona o URL da solicitação para o Google.com. Ele pode ser usado diretamente no bloco de código do servidor ou em um bloco de código de localização, mas certifique-se de não redirecionar para o mesmo domínio para evitar o loop de redirecionamento

return 301 https: // google.com;

O seguinte snippet de código redireciona o URL da solicitação para Nucuta.com junto com o caminho, por exemplo, o exemplo supracitado não contém nenhum caminho, parâmetros e, portanto, não importa qual URL é digitado na barra de endereço, a solicitação é redirecionada para o domínio raiz do Google, enquanto no exemplo a seguir, o caminho, junto com os parâmetros, são transportados sem o nome de domínio. Alternativamente, $ is_args $ args pode ser usado, mas em vez de $ request_uri, a variável $ uri deve ser usada porque $ request_uri contém parâmetros da URL também. Se o requisito for redirecionar para um diretório diferente do mesmo domínio, use a variável $ host em vez do nome de domínio na diretiva de retorno, por exemplo, no exemplo a seguir em vez de nucuta.com, use $ host.

return 301 https: // nucuta.com $ request_uri;

O seguinte snippet de código redireciona a solicitação de entrada para o diretório de caminho do mesmo domínio e o esquema, ou seja, se o seguinte snippet de código for usado em http: // Linux.com, e se um visitante fez uma solicitação a ele, ele é redirecionado para o diretório de caminho e, portanto, o seguinte trecho de código é útil ao gerenciar um grande número de sites. Aqui, o esquema $ define o protocolo do URL, como FTP, HTTP, HTTPS e o $ host define o domínio do servidor atual com sua extensão de domínio, como o Google.com, Linux.Net etc. Uma vez que isso não executa nenhum redirecionamento de protocolo, como de HTTP para HTTPs, deve ser feito manualmente como no segundo exemplo.

return 301 $ scheme: // $ host / path;
if (esquema de $ != "https")
return 301 https: // $ host $ request_uri;

Outro caso de uso útil da diretiva de retorno é a capacidade de incluir variáveis ​​regex, mas para isso a expressão regular deve ser especificada no bloco de localização e deve capturar um padrão, então o padrão capturado pode ser combinado com o URL existente na diretiva de retorno para fins de redirecionamento, por exemplo, no exemplo a seguir, quando uma solicitação é feita para acessar um arquivo de texto, ele captura o nome do arquivo de texto no bloco de localização, em seguida, passa esse nome para a diretiva de retorno e, em seguida, a diretiva de retorno o combina com o existente URL para redirecionar a solicitação para outro diretório.

localização ~ * ^ / ([^ /]+.txt) $
retornar 301 / cromo / $ 1;

Reescrever

Rewrite é uma diretiva usada para reescrever URLs internamente no servidor web sem expor o mecanismo subjacente ao lado do cliente. De acordo com sua sintaxe, é usado com expressões regulares. A sintaxe básica é a seguinte. O marcador de posição regex é para usar expressões regulares, o marcador de posição de substituição é para substituir o URL correspondente, enquanto o sinalizador é para manipular o fluxo da execução. No momento, os sinalizadores usados ​​na diretiva rewrite são break, permanent, redirect e last.

reescrever a substituição de regex [sinalizador];

Antes de prosseguir para as expressões regulares, substituições, captura de padrão e variável, é importante saber como os sinalizadores fazem o mecanismo interno do Nginx se comportar. Existem quatro sinalizadores principais usados ​​com a diretiva de reescrita, conforme explicado anteriormente, entre eles permanentes, os sinalizadores de redirecionamento podem ser emparelhados, pois ambos executam a mesma funcionalidade, o que significa redirecionamento.

Redirecionar

O sinalizador de redirecionamento é usado para sinalizar ao navegador que o redirecionamento é temporário, o que também é útil em rastreadores de mecanismos de pesquisa para reconhecer que a página foi temporariamente removida e será reintegrada em seu local original algum tempo depois. Quando a página sinaliza que é 302, os mecanismos de pesquisa não fazem nenhuma alteração em sua indexação e, portanto, os visitantes ainda veem a página original no índice do mecanismo de pesquisa durante a pesquisa, o que significa que a página antiga não é removida e, além disso, todos os , como page rank, link juice não são passados ​​para a nova página.

localização /

reescrever ^ http: // 155.138.Xxx.XXX / redirecionamento de caminho;

Permanente

Sinalizador permanente é usado para sinalizar ao navegador que o redirecionamento é permanente, o que também é útil em rastreadores de mecanismos de pesquisa para reconhecer que a página foi movida permanentemente e NÃO será reintegrada em seu local original algum tempo depois, como com a mudança temporária. Quando a página sinaliza que é 301, os mecanismos de pesquisa fazem algumas alterações em sua indexação e, portanto, os visitantes veem a nova página no índice do mecanismo de pesquisa em vez da página antiga durante a pesquisa, o que significa que a página antiga é substituída pela nova página, além disso, todos os qualitados, como page rank, link juice são passados ​​para a nova página.

localização /

reescrever ^ http: // 155.138.Xxx.XXX / caminho permanente;

Expressão regular, captura de padrão e variáveis.

O Nginx usa bastante expressão regular com diretiva de reescrita e, portanto, saber sobre expressões regulares é útil neste segmento.  Existem vários tipos de expressões regulares, mas o Nginx usa Expressões Regulares Compatíveis com Perl, também conhecidas como PCRE. Ter uma ferramenta de teste de expressão regular é útil para garantir que o padrão escrito realmente funcione de antemão usando-o no arquivo de configuração Nginx. Este guia recomenda https: // regex101.com / como a ferramenta, e todos os exemplos a seguir são testados com a ferramenta mencionada exaustivamente.

Expressões regulares

reescrever ^ / fr / (.*) $ http: // nucuta.com / $ 1 permanente;

Um padrão típico de diretiva de reescrita é como acima, contém a diretiva de reescrita no início, em seguida, com um espaço o "padrão" na expressão regular, em seguida, com um espaço a "substituição" e, finalmente, o "sinalizador". A diretiva rewrite pode ser colocada em qualquer lugar dentro dos colchetes do servidor, mas é recomendado mantê-la após especificar as diretivas listen, server_name, root e index. Quando um visitante faz uma solicitação ao servidor, uma URL é enviada junto com a solicitação, então, se a URL corresponder ao padrão de expressão regular especificado na diretiva de reescrita, ela é reescrita com base na substituição e o fluxo de execução é manipulado com base na bandeira.

O padrão de expressão regular usa colchetes para indicar o grupo, cuja substring é extraída do URL ao combinar o padrão regex com a URL da solicitação, então essa substring retirada do URL é atribuída à variável no “Substituição” da diretiva de reescrita. Se houver vários grupos correspondidos, a subcadeia de cada grupo correspondido é atribuída às variáveis ​​em "substituição" em ordem numerável, o que significa que a subcadeia do primeiro grupo correspondido é atribuída à primeira variável ($ 1), a subcadeia do o segundo grupo correspondido é atribuído à segunda variável ($ 2), e assim por diante.

Das 4 bandeiras, 2 já foram explicadas neste guia, as restantes são as últimas e quebram. Antes de entender como as sinalizações restantes funcionam, é importante entender como o mecanismo Nginx se comporta com diretivas de reescrita. Quando um URL é enviado junto com uma solicitação, o mecanismo Nginx tenta combiná-lo com um bloco de localização. Quer seja correspondido ou não, se uma diretiva como rewrite, return for encontrada, ela é executada sequencialmente. Se o URL enviado corresponder ao padrão de uma diretiva de reescrita, o mecanismo Nginx executa todo o arquivo de configuração, independentemente de onde a diretiva de reescrita é especificada como um loop, até que o URL recém-reescrito corresponda a um dos blocos de localização.

A seguinte URL é usada como uma demonstração para explicar como ambas as sinalizações fazem o fluxo de execução do motor Nginx se comportar com a diretiva rewrite. A captura de tela a seguir retrata a estrutura de arquivos do servidor web.

http: // 155.138.Xxx.XXX / navegador / amostra.txt (o URL enviado como uma solicitação)

Quando nenhuma bandeira é usada

Quando nenhum sinalizador é usado, ambas as diretivas de reescrita são executadas sequencialmente; portanto, o primeiro URL na lista a seguir se transforma em 2WL, então 2WL O URL se transforma no último URL Então, quando a amostra.arquivo txt na pasta do navegador é solicitado, o servidor web realmente serve a amostra.arquivo txt na pasta raiz. Como a regravação de URL é completamente abstraída do navegador, não há nenhuma diferença na exibição em comparação com a diretiva de retorno que informa ao navegador se a solicitação foi redirecionada ou não com um número HTTP.

  1. http: // 155.138.Xxx.XXX / navegador / amostra.TXT
  2. http: // 155.138.Xxx.XXX / cromo / amostra.TXT
  3. http: // 155.138.Xxx.XXX / amostra.TXT
localização /

reescrever ^ / navegador / (.*) $ / cromo / $ 1;
reescrever ^ / chrome / (.*) $ / $ 1;
localização / cromo
try_files $ uri $ uri / = 404;

Quando Break ou Last Flag for especificado fora do bloco de localização

Quando o break ou o último sinalizador é especificado fora do bloco de localização, as diretivas de reescrita após a diretiva de reescrita correspondente não são analisadas, por exemplo, no exemplo a seguir, o URL de solicitação é reescrito no 2WL um na lista a seguir, independentemente do sinalizador usado, e é isso.

  1. http: // 155.138.Xxx.XXX / navegador / amostra.TXT
  2. http: // 155.138.Xxx.XXX / cromo / amostra.TXT
localização /

reescrever ^ / navegador / (.*) $ / chrome / $ 1 last; #break
reescrever ^ / chrome / (.*) $ / $ 1 último; #break
localização / cromo
try_files $ uri $ uri / = 404;

Quando a última bandeira é usada dentro de um bloco de localização

Quando o último sinalizador é usado dentro de um bloco de localização, ele para de analisar mais diretivas de reescrita dentro desse bloco de localização específico e mergulha no próximo bloco de localização de reescrita se o URL reescrito corresponder ao caminho desse bloco de localização, então ele executa o subsequente diretiva de reescrita dentro dele.

  1. http: // 155.138.Xxx.XXX / navegador / amostra.TXT
  2. http: // 155.138.Xxx.XXX / cromo / amostra.TXT
  3. http: // 155.138.Xxx.XXX / amostra.TXT
localização /
reescrever ^ / navegador / (.*) $ / cromo / $ 1 por último;

localização / cromo
reescrever ^ / chrome / (.*) $ / $ 1 por último;
try_files $ uri $ uri / = 404;

Quando a bandeira de quebra é usada dentro de um bloco de localização

Break flag, por outro lado, quando está dentro de um bloco de localização, para de analisar mais diretivas de reescrita, independentemente de onde elas estejam localizadas, quando uma diretiva de reescrita é combinada com o URL de solicitação e serve o conteúdo ao usuário.

localização /
reescrever ^ / navegador / (.*) $ / cromo / $ 1 pausa;

localização / cromo
reescrever ^ / chrome / (.*) $ / $ 1 pausa;
try_files $ uri $ uri / = 404;

Conclusão

A regravação de URL é um processo de regravação de URLs em um servidor web. O Nginx fornece várias diretivas, como retornar, reescrever, diretivas de mapa para torná-lo possível. Este guia demonstra o que são diretivas de retorno e reescrita e como elas são usadas para reescrever URLs com facilidade. Conforme demonstrado nos exemplos, a diretiva de retorno é adequada para sinalizar o navegador e o mecanismo de pesquisa rastreia o paradeiro da página, enquanto a diretiva de reescrita é útil para abstrair o processo de reescrita de URL sem permitir que o navegador saiba o que está acontecendo nos bastidores. Isso é bastante útil para servir conteúdo por meio de um CDN, servidor em cache ou de um local diferente na rede. Os usuários nunca sabem de onde o recurso está vindo, pois o navegador só mostra a URL fornecida a eles.

Como alterar o ponteiro do mouse e tamanho do cursor, cor e esquema no Windows 10
O ponteiro do mouse e o cursor no Windows 10 são aspectos muito importantes do sistema operacional. Isso também pode ser dito para outros sistemas ope...
Mecanismos de jogos gratuitos e de código aberto para o desenvolvimento de jogos Linux
Este artigo cobrirá uma lista de mecanismos de jogo gratuitos e de código aberto que podem ser usados ​​para desenvolver jogos 2D e 3D no Linux. Exist...
Tutorial de Shadow of the Tomb Raider para Linux
Shadow of the Tomb Raider é a décima segunda adição à série Tomb Raider - uma franquia de jogos de ação e aventura criada pela Eidos Montreal. O jogo ...