Nginx

Cómo utilizar la reescritura de URL

Cómo utilizar la reescritura de URL
La reescritura de URL es un proceso que consiste en cambiar la URL de la solicitud a otra, según se define en el servidor web. Nginx utiliza el módulo ngx_http_rewrite_module, que utiliza principalmente directivas de retorno y reescritura con fines de reescritura. Aparte de estas directivas definidas en este módulo, la directiva de mapa, definida en ngx_http_map_module, también se puede utilizar para reescribir URL con facilidad. Esta guía tiene la intención de explicar acerca de 2 directivas principales: retorno, reescritura y sus banderas, cómo funcionan y sus aplicaciones.

Prerrequisitos

Esta guía está optimizada para Nginx 1.0.1 y superior, por lo que se recomienda encarecidamente actualizar la instancia de Nginx existente a la versión anterior o anterior. Sin embargo, algunos de los comandos y las sintaxis pueden seguir funcionando para cualquier versión anterior a la versión mencionada anteriormente. Dado que esta guía trata sobre la reescritura de URL, que es un tema un poco avanzado, se supone que la audiencia conoce el procedimiento de instalación de Nginx y, por lo tanto, no se explica aquí.

Regreso

Return es la directiva básica que realiza la reescritura de URL y es fácil de entender. No usa expresiones regulares, pero puede incluir variables para analizar, capturadas de la ruta del bloque de ubicación. Por lo general, la directiva de retorno se usa para redirigir la URL de la solicitud a una ubicación diferente y, por lo tanto, a menudo usa códigos HTTP como 301 para la redirección permanente y 302 para la redirección temporal. Los siguientes fragmentos de código demuestran algunos de los casos de uso de la directiva return.

El siguiente fragmento de código redirige la URL de la solicitud a Google.com. Se puede usar directamente debajo del bloque de código del servidor o debajo de un bloque de código de ubicación, pero asegúrese de no redirigir al mismo dominio para evitar el bucle de redireccionamiento

return 301 https: // google.com;

El siguiente fragmento de código redirige la URL de la solicitud a Nucuta.com junto con la ruta, por ejemplo, el ejemplo anterior no contiene ninguna ruta, parámetros y, por lo tanto, no importa qué URL se escriba en la barra de direcciones, la solicitud se redirige al dominio raíz de Google, mientras que en el siguiente ejemplo, la ruta, junto con los parámetros, se transfieren sin el nombre de dominio. Alternativamente, se puede usar $ is_args $ args, pero luego, en lugar de $ request_uri, se debe usar la variable $ uri ya que $ request_uri también contiene parámetros de la URL. Si el requisito es redirigir a un directorio diferente del mismo dominio, utilice $ variable host en lugar del nombre de dominio en la directiva de retorno, por ejemplo, en el siguiente ejemplo en lugar de nucuta.com, use $ host.

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

El siguiente fragmento de código redirige la solicitud entrante al directorio de ruta del mismo dominio y al esquema, es decir, si el siguiente fragmento de código se usa en http: // Linux.com, y si un visitante realiza una solicitud, se redirige al directorio de ruta y, por lo tanto, el siguiente fragmento de código es útil para administrar una gran cantidad de sitios web. Aquí $ esquema define el protocolo de la URL, como FTP, HTTP, HTTPS, y $ host define el dominio del servidor actual con su extensión de dominio, como Google.com, Linux.Net, etc. Dado que esto no realiza ninguna redirección de protocolo, como de HTTP a HTTP, debe hacerse manualmente como en el segundo ejemplo.

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

Otro caso de uso útil de la directiva de retorno es la capacidad de incluir variables regex, pero para eso, la expresión regular debe especificarse en el bloque de ubicación, y debe capturar un patrón, luego el patrón capturado se puede combinar con la URL existente en la directiva de retorno. para fines de redirección, por ejemplo, en el siguiente ejemplo, cuando se realiza una solicitud para acceder a un archivo de texto, captura el nombre del archivo de texto en el bloque de ubicación, luego pasa ese nombre a la directiva de retorno, luego la directiva de retorno lo combina con el existente URL para redirigir la solicitud a otro directorio.

ubicación ~ * ^ / ([^ /]+.txt) $
return 301 / chrome / $ 1;

Volver a escribir

Rewrite es una directiva que se utiliza para reescribir las URL internamente en el servidor web sin exponer el mecanismo subyacente al lado del cliente. Según su sintaxis, se usa con expresiones regulares. La sintaxis básica es la siguiente. El marcador de posición de expresiones regulares es para usar expresiones regulares, el marcador de posición de reemplazo es para reemplazar la URL coincidente, mientras que la bandera es para manipular el flujo de la ejecución. Por el momento, las banderas utilizadas en la directiva de reescritura son break, permanente, redirect y last.

reescribir el reemplazo de expresiones regulares [bandera];

Antes de pasar a las expresiones regulares, reemplazos, captura de patrones y variables, es importante saber cómo las banderas hacen que se comporte el motor interno de Nginx. Hay cuatro indicadores principales que se utilizan con la directiva de reescritura como se explicó anteriormente, entre ellos, los indicadores de redireccionamiento permanentes se pueden emparejar ya que ambos realizan la misma funcionalidad, lo que significa redirección.

Redirigir

La bandera de redireccionamiento se utiliza para indicarle al navegador que la redirección es temporal, lo que también es útil para que los rastreadores de los motores de búsqueda reconozcan que la página se ha movido temporalmente y se restablecerá en su ubicación original algún tiempo después. Cuando la página indica que es 302, los motores de búsqueda no realizan ningún cambio en su indexación y, por lo tanto, los visitantes aún ven la página original en el índice del motor de búsqueda durante la búsqueda, lo que significa que la página anterior no se elimina y, además, todos los elementos calificados. , como el rango de la página, el contenido de enlaces no se transfiere a la nueva página.

localización /

reescribir ^ http: // 155.138.XXX.XXX / redireccionamiento de ruta;

Permanente

La bandera permanente se utiliza para indicar al navegador que la redirección es permanente, lo que también es útil para que los rastreadores de los motores de búsqueda reconozcan que la página se ha movido permanentemente y NO se restablecerá en su ubicación original algún tiempo después, como con el traslado temporal. Cuando la página indica que es 301, los motores de búsqueda realizan algunos cambios en su indexación y, por lo tanto, los visitantes ven la nueva página en el índice del motor de búsqueda en lugar de la página anterior cuando realizan una búsqueda, lo que significa que la página anterior se reemplaza con la nueva página, además, todos los calificados, como el rango de la página, el jugo del enlace se pasan a la nueva página.

localización /

reescribir ^ http: // 155.138.XXX.XXX / ruta permanente;

Expresión regular, captura de patrones y variables.

Nginx usa la expresión regular en gran medida con la directiva de reescritura, por lo que conocer las expresiones regulares es útil en este segmento.  Hay varios tipos de expresiones regulares, pero Nginx usa Expresiones regulares compatibles con Perl, también conocidas como PCRE. Tener una herramienta de prueba de expresiones regulares es útil para asegurarse de que el patrón escrito realmente funcione de antemano al usarlo en el archivo de configuración de Nginx. Esta guía recomienda https: // regex101.com / como la herramienta, y todos los ejemplos siguientes se prueban con la herramienta mencionada a fondo.

Expresiones regulares

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

Un patrón típico de directiva de reescritura es el anterior, contiene la directiva de reescritura al principio, luego con un espacio el "patrón" en la expresión regular, luego con un espacio el "reemplazo" y finalmente la "bandera". La directiva de reescritura se puede colocar en cualquier lugar dentro de los corchetes del servidor, pero se recomienda mantenerla después de especificar las directivas listen, server_name, root e index. Cuando un visitante realiza una solicitud al servidor, se envía una URL junto con la solicitud, luego, si la URL coincide con el patrón de expresión regular especificado en la directiva de reescritura, se reescribe según el reemplazo, luego el flujo de ejecución se manipula en base en la bandera.

El patrón de expresión regular usa corchetes para indicar el grupo, cuya subcadena se extrae de la URL al hacer coincidir el patrón de expresiones regulares con la URL de la solicitud, luego esa subcadena sacada de la URL se asigna a la variable en el "Reemplazo" de la directiva de reescritura. Si hay varios grupos emparejados, la subcadena de cada grupo emparejado se asigna a las variables en "reemplazo" en orden numérico, lo que significa que la subcadena del primer grupo emparejado se asigna a la primera variable ($ 1), subcadena de la El segundo grupo emparejado se asigna a la segunda variable ($ 2), y así sucesivamente.

De 4 banderas, 2 banderas ya se explicaron en esta guía, las restantes son las últimas y se rompen. Antes de comprender cómo funcionan los indicadores restantes, es importante comprender cómo se comporta el motor Nginx con las directivas de reescritura. Cuando se envía una URL junto con una solicitud, el motor Nginx intenta hacerla coincidir con un bloque de ubicación. Ya sea que coincida o no, si se topa con una directiva como rewrite, return, se ejecuta secuencialmente. Si la URL enviada coincide con el patrón de una directiva de reescritura, el motor Nginx ejecuta todo el archivo de configuración, independientemente de dónde se especifique la directiva de reescritura como un bucle, hasta que la URL recién reescrita coincida con uno de los bloques de ubicación.

La siguiente URL se utiliza como demostración para explicar cómo ambos indicadores hacen que el flujo de ejecución del motor Nginx se comporte con la directiva de reescritura. La siguiente captura de pantalla muestra la estructura de archivos del servidor web.

http: // 155.138.XXX.XXX / navegador / muestra.txt (la URL enviada como una solicitud)

Cuando no se usa ninguna bandera

Cuando no se usa ninguna bandera, ambas directivas de reescritura se ejecutan secuencialmente; por lo tanto, la primera URL de la siguiente lista se convierte en 2Dakota del Norte, luego 2Dakota del Norte URL se convierte en la última URL Entonces, cuando la muestra.txt en la carpeta del navegador, el servidor web en realidad sirve la muestra.txt en la carpeta raíz. Dado que la reescritura de URL se extrae completamente del navegador, no ve ninguna diferencia en el servicio en comparación con la directiva de devolución que indica al navegador si la solicitud fue redirigida o no con un número HTTP.

  1. http: // 155.138.XXX.XXX / navegador / muestra.TXT
  2. http: // 155.138.XXX.XXX / chrome / sample.TXT
  3. http: // 155.138.XXX.XXX / muestra.TXT
localización /

reescribir ^ / browser / (.*) $ / chrome / $ 1;
reescribir ^ / chrome / (.*) $ / $ 1;
location / chrome
try_files $ uri $ uri / = 404;

Cuando se especifica la ruptura o el último indicador fuera del bloque de ubicación

Cuando se especifica break o last flag fuera del bloque de ubicación, las directivas de reescritura después de la directiva de reescritura coincidente no se analizan en absoluto, por ejemplo, en el siguiente ejemplo, la URL de solicitud se reescribe a la 2Dakota del Norte uno en la siguiente lista independientemente de la bandera utilizada, y eso es todo.

  1. http: // 155.138.XXX.XXX / navegador / muestra.TXT
  2. http: // 155.138.XXX.XXX / chrome / sample.TXT
localización /

reescribir ^ / browser / (.*) $ / chrome / $ 1 último; #break
reescribir ^ / chrome / (.*) $ / $ 1 último; #break
location / chrome
try_files $ uri $ uri / = 404;

Cuándo se usa la última bandera dentro de un bloque de ubicación

Cuando se usa la última bandera dentro de un bloque de ubicación, deja de analizar más directivas de reescritura dentro de ese bloque de ubicación en particular y se sumerge en el siguiente bloque de ubicación de reescritura si la URL reescrita coincide con la ruta de ese bloque de ubicación, luego ejecuta el directiva de reescritura posterior dentro de ella.

  1. http: // 155.138.XXX.XXX / navegador / muestra.TXT
  2. http: // 155.138.XXX.XXX / chrome / sample.TXT
  3. http: // 155.138.XXX.XXX / muestra.TXT
localización /
reescribir ^ / browser / (.*) $ / chrome / $ 1 último;

location / chrome
reescribir ^ / chrome / (.*) $ / $ 1 último;
try_files $ uri $ uri / = 404;

Cuando se usa la bandera de ruptura dentro de un bloque de ubicación

Break flag, por otro lado, cuando está dentro de un bloque de ubicación, deja de analizar más directivas de reescritura, independientemente de dónde estén ubicadas, cuando una directiva de reescritura coincide con la URL de la solicitud y entrega el contenido al usuario.

localización /
reescribir ^ / browser / (.*) $ / chrome / $ 1 descanso;

location / chrome
reescribir ^ / chrome / (.*) $ / $ 1 descanso;
try_files $ uri $ uri / = 404;

Conclusión

La reescritura de URL es un proceso de reescritura de URL dentro de un servidor web. Nginx proporciona múltiples directivas como return, rewrite, map directivas para hacerlo posible. Esta guía demuestra qué son las directivas de devolución y reescritura, y cómo se utilizan para reescribir URL con facilidad. Como se demuestra en los ejemplos, la directiva de retorno es adecuada para señalar al navegador y el motor de búsqueda rastrea el paradero de la página, mientras que la directiva de reescritura es útil para abstraer el proceso de reescritura de URL sin dejar que el navegador sepa lo que está sucediendo detrás de la escena. Esto es bastante útil para servir contenido a través de un CDN, un servidor en caché o desde una ubicación diferente dentro de la red. Los usuarios nunca saben de dónde proviene el recurso, ya que el navegador solo muestra la URL que se les proporcionó.

Instale el último emulador de Dolphin para Gamecube y Wii en Linux
Dolphin Emulator te permite jugar los juegos de Gamecube y Wii que elijas en computadoras personales con Linux (PC). Al ser un emulador de juegos de ...
Cómo usar GameConqueror Cheat Engine en Linux
El artículo cubre una guía sobre el uso del motor de trucos GameConqueror en Linux. Muchos usuarios que juegan juegos en Windows a menudo usan la apli...
Los mejores emuladores de consola de juegos para Linux
Este artículo enumerará el software de emulación de consola de juegos más popular disponible para Linux. La emulación es una capa de compatibilidad de...