Crear redireccionamiento y reescribir reglas en .Htaccess en Apache Webserver

Crear redireccionamiento y reescribir reglas en .Htaccess en Apache Webserver

Cuando se usa el servidor web Apache, .htaccess Los archivos (también llamados "archivos de configuración distribuidos") se utilizan para especificar la configuración por directorio, o más generalmente para modificar el comportamiento del servidor web Apache sin tener que acceder a los archivos de hosts virtuales directamente (esto suele ser imposible, por ejemplo, por ejemplo, en hosts compartidos). En este tutorial vemos cómo podemos establecer redirecciones de URL y reescribir reglas dentro de .htaccess archivos.

En este tutorial aprenderás:

  • Cómo .Funcionan los archivos htaccess
  • Cómo configurar las reglas de reescritura de URL en .archivos htaccess usando el Rewriterule directiva
  • Cómo configurar las reglas de redirección de URL en .archivos htaccess usando el Redireccionar y Redirección directivas
Crear redireccionamiento y reescribir reglas en .Htaccess en Apache Webserver

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Distribución independiente
Software Servidor web de Apache
Otro No se necesitan otros requisitos
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
$-Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

¿Deberías usar .archivos htaccess?

Como ya mencionamos, el uso de .htaccess No se recomiendan archivos si puede operar en archivos de configuración de host virtuales directamente, ya que ralentiza el servidor web Apache (cuando el Permitir sobrescritura La directiva se utiliza para permitir el uso de .htaccess archivos, el servidor web escanea cada directorio que los busca). En algunas situaciones, sin embargo, el uso de .htaccess archivos es la única solución.

El conjunto de directivas que se pueden usar en .htaccess Los archivos se establecen en la configuración del sitio principal a través del Permitir sobrescritura directiva, dentro de un estrofa; Por ejemplo, para permitir el uso de todas las directivas posibles, escribiríamos algo como:

 Permateverride todo  

Las instrucciones se aplicarán a .htaccess Archivos encontrados en el directorio especificado y todos sus subdirectorios.

Para las directivas que utilizaremos en este tutorial para trabajar, el mod_alias y mod_rewrite Los módulos Apache deben estar habilitados.

Redirecciones (mod_alias)

Como se especificó anteriormente, en nuestro .htaccess archivos, es posible que deseemos especificar algunas reglas de redirección, de modo que cuando se solicite una URL, el cliente se redirige a otro.

Básicamente tenemos dos formas de realizar la operación: usar el Redireccionar o el Redirección directivas. Cuál es la diferencia entre los dos? El primero establecamos una redirección basada en coincidencias de URL simples y simples; El primero hace básicamente lo mismo, pero es más poderoso, ya que con él podemos usar expresiones regulares.

La directiva "redirigir"

Veamos algunos ejemplos del uso del redireccionar directiva. Supongamos que queremos redirigir todo nuestro sitio:

Redireccionar 301/https: // url/to/redirect/to 


El anterior es un ejemplo bastante "extremo". Analicemos la sintaxis. Como lo primero que especificamos la directiva: Redireccionar.

La segunda cosa que proporcionamos es el código HTTP que se utilizará para la redirección: se puede proporcionar como un estado numérico o en forma de una cadena.
Algunos ejemplos:

Código HTTP PALABRA CLAVE
301 permanente
302 temperatura
303 ver otro
410 desaparecido

En el ejemplo anterior configuramos un permanente redirección ya que usamos el 301 Código HTTP. Un equivalente de eso sería:

Redirigir permanente/https: // url/to/redirect/to 

El tipo de redirección se puede omitir por completo: cuando es el caso, el 302 código (redirección temporal) Se usa de forma predeterminada.

El tercer argumento que proporcionamos en la regla es el absoluto ruta del recurso "original" que debe coincidir. En este caso usamos / cuál es la raíz del sitio, ya que queremos redirigirla por completo. Aquí el esquema y anfitrión parte de la URL debe ser omitido.

El cuarto argumento es la "nueva" URL que el usuario debe ser redirigido. En este caso, como lo hicimos en el ejemplo anterior, podemos usar una URL completa, incluida esquema y anfitrión, u omitirlos y usar solo una ruta: en el último caso, se consideraría como parte del mismo sitio original. Este argumento es obligatorio si el estado de redirección especificado es entre 301 y 399, pero Debe ser omitido Si el estado proporcionado no está en ese rango. Esto tiene sentido: imagina que usamos un 410 Estado para indicar que el recurso se ha ido: no tendría sentido especificar una URL de redirección. En ese caso simplemente escribiríamos:

Redirigir 410/ruta/de/recurso 


La directiva "redirectMatch"

Con la directiva "redirección" podemos especificar que la ruta de la URL se redirige, pero debe coincidir con simple y simple, como se especifica. ¿Qué pasa si queremos realizar algo más complejo, como por ejemplo para redirigir las solicitudes de todos los archivos con el .html extensión? En esos casos, podemos usar el Redirección directiva y use un expresión regular. Veamos un ejemplo:

RedirectMatch 301 (.*) \.html $ $ 1.php 

En el ejemplo anterior redirigimos todas las solicitudes para .html archivos en nuestro sitio a archivos con el mismo nombre y ruta, pero con el .php extensión. Analicemos la regla.

Como siempre, lo primero que proporcionamos es la directiva, en este caso Redirección. Después de eso, como lo hicimos antes, proporcionamos el código HTTP para ser utilizado para la redirección; Entonces, y esto es lo interesante, usamos el (.*) \.html $ expresión regular.

A aquellos de ustedes que ya están familiarizados con regular Esto debería ser claro de inmediato, pero veamos cómo funciona: el . (punto) en la expresión regular coincide con todos los caracteres: es seguido por el * que establecen que la expresión anterior debe coincidir 0 o más veces. La expresión está encerrada entre paréntesis, por lo que se agrupa, y la parte de la URL que coincide con la que se puede hacer referencia más tarde a través del $ 1 variable (se pueden usar múltiples grupos: se "llaman" progresivamente, por lo que, por ejemplo, coincidir con el segundo grupo que podemos usar $ 2). Después de la parte de la expresión encerrada entre paréntesis, especificamos que la ruta debería terminar en .html: puedes ver que escapamos del . con una barra insegura para que
ser emparejado literalmente. Finalmente usamos ps para igualar el final de la línea.

Como argumento para la URL de redirección que usamos $ 1.php. Como ya explicamos el $ 1 se usa para hacer referencia a la parte de la URL que coincidía con la expresión regular entre paréntesis (que es la ruta completa menos la .html extensión), entonces lo que estamos haciendo aquí es básicamente usar la misma ruta pero con el .php extensión.

Reescritura de URL (mod_rewrite)

Las reglas de reescritura de URL pueden ser ambas transparente o visible por el usuario. En el primer caso, el usuario solicita una página, y el servidor, internamente, traduce la solicitud en la base de la regla proporcionada para servir al recurso: el usuario no nota lo que está sucediendo, ya que la URL en su navegador no lo hace ' T Cambio. En el segundo caso, en cambio, prácticamente logramos una redirección completa visible por el usuario.

Comencemos con el primer caso. Si queremos usar la reescritura de URL, lo primero que tenemos que hacer (en este caso en nuestro .htaccess Archivo) es escribir la siguiente directiva:

RewriteEngine en 

El Mota de rewrite La directiva, como su nombre indica, es necesaria para modificar el estado del motor de reescritura de Apache. En el ejemplo anterior, lo habilitamos; Para deshabilitarlo, en su lugar debemos escribir:

RewriteEngine Off 


Solo como ejemplo, supongamos que tenemos un recurso llamado página.html En nuestro servidor, que solía ser alcanzado por la URL simple y simple: http: // localhost/página.html. Ahora imagine que por algunas razones renombramos el archivo HTML, a nueva pagina.html, Pero por razones obvias, queremos que nuestros clientes aún puedan llegar al recurso con la antigua URL (tal vez la hayan almacenado en sus marcadores de navegador). Lo que podríamos hacer es escribir lo siguiente, muy
regla simple:

RewriteEngine en Rewriterule ^Page \.HTML /NEWPAGE.html 

La sintaxis de la regla es muy similar a la que usamos para el Redirección Directiva: Primero tenemos la directiva en sí, Rewriterule, de lo que tenemos el patrón Solado para la coincidencia de URL: debe ser un regular. Después de eso, tenemos el sustitución cadena, que se usa para reemplazar la URL original.

Hay un cuarto elemento que se puede usar en la definición de un Rewriterule son los banderas, que se utilizan para modificar el comportamiento del servidor web cuando se combina una determinada regla.

Veamos un ejemplo: con la regla que establecemos arriba, como ya dijimos, no ocurre la redirección: la URL en la barra de direcciones del navegador no cambia. Si queremos que ocurra una redirección, tenemos que agregar el Riñonal bandera a la expresión:

RewriteEngine en Rewriterule ^Page \.HTML /NEWPAGE.html [r] 

Se proporcionan banderas entre los soportes: en este caso específico el Riñonal la bandera hace que la regla se interprete como una redirección. Incluso es posible especificar el tipo de redirección que debe tener lugar, especificando el código HTTP relacionado, por ejemplo:

Rewriterule ^Página \.HTML /NEWPAGE.html [r = 301] 

Otras cosas comunes a las que se usa la reescritura de URL es "embellecer" las URL, para fines de SEO. Digamos que, por ejemplo, tenemos un script PHP que recupera de una base de datos un determinado producto por su identificación proporcionado como parámetro de consulta en
la URL, por ejemplo:

http: // localhost/productos.php?id = 1 

Para que el recurso esté disponible en el http: // localhost/productos/1 URL, podríamos escribir la siguiente regla:

RewriteEngine en Rewriterule ^Productos /([0-9]+) $ /Productos.php?ID = $ 1 

Con el [0-9] regex combinamos con todos los dígitos, y con el + Decimos que la expresión anterior debe coincidir 1 o más veces para que la regla se ejecute. La expresión coincidente está encerrada entre paréntesis, por lo que podemos hacer referencia a la parte coincidente de la URL en la cadena "Destino", utilizando el $ 1 variable. De esta manera, la identificación del producto que proporcionamos en la URL "embellecida", se convierte en el valor de la identificación variable en la cadena de consulta.

Reescribir condiciones

Acabamos de ver cómo, para que se aplique una regla de reescritura, la expresión regular debe coincidir con la URL proporcionada por el usuario. En el último ejemplo vimos cómo el http: // localhost/productos/1 URL se puede reescribir internamente a http: // localhost/productos.php?id = 1. Pero, ¿qué pasa si la ruta especificada por la nueva URL hace referencia a un archivo "real" existente en el servidor? ¿Qué pasa si, por ejemplo?, /Productos/1 es un archivo regular, y queremos que se sirva como es? En casos como este podemos usar el Reescritura directiva.

Con el Reescritura Directiva, especificamos una condición que debe respetarse para que la reescritura de URL tenga lugar. En este caso, por ejemplo, es posible que deseemos establecer que si el Productos/1 El archivo existe en el servidor, la redirección
no debe tener lugar. Escribiríamos:

RewriteEngine en RewriteCond %request_filename !-f rewriterule ^Products /([0-9]+) $ /Productos.php?ID = $ 1 

Usamos el Reescritura directiva, antes del Rewriterule. Lo primero que pasamos a la directiva es el cadena de prueba que debería coincidir. En este contexto podemos usar una serie de variables de servidor predefinidas, como %Request_filename:
hace referencia al La ruta del sistema de archivos local completo al archivo o script que coincide con la solicitud.

Aquí no podemos proporcionar una lista completa de todas las variables disponibles, que puede encontrar visitando la documentación Apache Mod_rewrite.

Después de la "cadena de prueba", especificamos la condición que debe coincidir: en este caso usamos !-F Para especificar que para aplicar la URL de reescritura, el archivo o el script que coincida con la solicitud no debe ser un archivo regular existente en el servidor (-F coincide con un archivo normal y ! invertir el resultado).

El anterior, es un ejemplo realmente simple de un Reescritura Directiva: se puede proporcionar más de uno antes del Rewriterule Directiva: todos deben coincidir para que este último se aplique.

Conclusiones

En este artículo vimos cómo podemos especificar redirecciones de URL y reglas de reescritura de URL en .htaccess Archivos Al usar el servidor web Apache. Vimos algunos ejemplos muy fáciles del uso del Redireccionar, Redirección y Rewriterule directivas y cómo podemos usarlas para lograr comportamientos específicos. Esto se entendió solo como una introducción a dichos sujetos, así que eche un vistazo a las páginas de documentación oficiales para los módulos mod_alias y mod_rewrite para un conocimiento más profundo.

Tutoriales de Linux relacionados:

  • Configuración de htaccess de OpenLitesPeed
  • Permitir .Htaccess en el servidor Apache 2 Linux
  • Cómo administrar hosts virtuales dinámicos con Apache y el ..
  • Cómo migrar apache a nginx convirtiendo virtualhosts en ..
  • Apache IP y hosts virtuales basados ​​en nombres explicados
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cómo usar Apache para redirigir todo el tráfico de HTTP a HTTPS
  • Cómo configurar VSFTPD en Debian
  • Mastering Bash Script Loops
  • Analizador de registro de Linux Apache