Crear redireccionamiento y reescribir reglas en .Htaccess en Apache Webserver
- 3973
- 1004
- Claudia Baca
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
yRedirección
directivas
Requisitos y convenciones de software utilizados
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
- « Cómo instalar la herramienta de extracción de datos de Registrip Registry en Linux
- BASH Avanzado Idióms para la gestión de la sensibilidad de los casos »