Cómo configurar mod_rewrite
mod_rewrite de Apache es una forma efectiva y fácil de manipular URLs. La manipulación de una URL se realiza desde el lado del servidor. Explicado de forma básica, con mod_rewrite, las URLs limpias y fáciles de usar se convierten en sitios web.
Como su nombre lo indica, este módulo realiza una reescritura de las URLs. Puede ser una excelente opción para limpiar las URLs de tu sitio web.
En este tutorial, te explicamos qué es mod_rewrite, por qué es útil y cómo configurarlo en un VPS que ejecute Apache.
Tabla de Contenidos
¿Cómo funciona Apache mod_rewrite?
Cada vez que un usuario ingresa una URL, se compara con una lista de reglas predefinidas. Las reglas están presentes para buscar patrones o palabras clave particulares. Si esa palabra clave está presente en la URL y la regla coincide, se reemplaza con una cadena predefinida: una nueva URL.
¿Qué hace que mod_rewrite sea útil?
La mayor ventaja que ofrece mod_rewrite es su capacidad para convertir las URLs comunes en URLs limpias, haciéndolas fácil de entender por el usuario final, que podría no ser un experto en tecnología.
A su vez, estas URL también son muy fáciles de usar y de buscar. ¡Los motores de búsqueda reconocen estas URL más rápido! ¿Qué es una URL limpia? Echemos un vistazo a este ejemplo:
- URL1: http://ejemplodemodrewrite.com/cliente.php?id=A786#234QA
- URL2: http://ejemplodemodrewrite.com/cliente/=A786#234QA/
- URL3: http://ejemplodemodrewrite.com/cliente/Martha/
De las tres URL anteriores, está claro que la tercera es mucho más legible y comprensible para el usuario final que la primera y la segunda. La URL 3 es una URL limpia.
¿Cómo configurar mod_rewrite en un VPS de Linux?
Recuerda, antes de comenzar, ¡necesitas acceder a tu VPS usando SSH! Consulta nuestro tutorial PuTTY si tienes inconvenientes con esto. Ahora comencemos el proceso:
1. Instala Apache
Usaremos Ubuntu 22.04 para este ejemplo. Esta versión de Ubuntu tiene un instalador de paquetes incorporado: apt-get. Primero, actualízalo ejecutando el comando:
sudo apt-get update
Ahora puedes proceder con la instalación de apache2.
El comando para la instalación es:
sudo apt-get install apache2
2. Habilita mod_rewrite
El siguiente paso es activar mod_rewrite.
El comando para hacerlo es:
sudo a2enmod rewrite
El comando anterior habilitará el modo de reescribir o te informará si ya está en uso. Después de esto, reinicia Apache:
sudo service apache2 restart
3. Crea el archivo .htaccess
Las reglas de reescritura de URL deben estar predefinidas. Aquí, .htaccess empieza a aparecer. Un usuario puede escribir todas las reglas en el archivo .htaccess. Este es usado por el servidor. No debería haber ningún error en este archivo, de lo contrario, devolverá un error del servidor. Podemos modificar nuestras reglas de reescritura en cualquier momento.
El archivo .htacess debe crearse en la raíz para probar la funcionalidad de reescritura.
Primero ejecuta el siguiente comando:
sudo nano /var/www/html/.htaccess
Esto creará el archivo .htaccess si aún no está en la raíz, o lo abrirá si ya existe. Por ahora puedes guardar y salir. En nano, puedes hacerlo presionando CTRL+O para guardar y CTRL+X para salir.
Continuando con los preparativos para usar mod_rewrite, debes abrir el archivo 000-default.conf ubicado en el /etc/apache2/sites-enabled/. Esto puedes hacerlo con el comando:
sudo nano /etc/apache2/sites-enabled/000-default.conf
Dentro de este archivo, coloca el siguiente bloque de código después de la cadena de caracteres <VirtualHost *:80>:
<Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow, deny allow from all </Directory>
Guarda el archivo como lo hiciste con .htaccess. Para que los cambios anteriores tengan efecto, reinicia Apache como se mencionó en el paso dos.
4. Reescribe una URL
Como mencionábamos antes, mod_rewrite lo que hace, básicamente, es seleccionar la URL limpia y convertirla en rutas reales que conducen al código. Para esto debes tener:
- Una regla de reescritura predefinida
- Un patrón: el patrón proporcionado actuará como una referencia coincidente con la URL ingresada por el usuario
- Reescribiendo líneas: llamará a la ruta que el servidor debería llamar en ese momento
Ahora, pasemos a escribir una regla de reescritura que redirigirá a un usuario a la página quienes_somos.html, si la URL solicitada es http://ip/quienessomos
Para ejecutar con éxito la regla de reescritura, el motor de reescritura debe estar encendido. Ingresa el siguiente comando al comienzo del archivo .htaccess.
RewriteEngine on
Y la siguiente línea puede ser tu regla:
ReWriteRule ^quienessomos$ quienes_somos.html [NC]
La sintaxis puede ser un poco confusa, vamos a desglosarla:
- En la regla anterior, quienessomos es el patrón, que cuando sea encontrado y coincida será redirigido a quienes_somos.html
- NC es una bandera que hace que la regla no sea sensible a mayúsculas y minúsculas.
- ^ Representa que el texto inmediatamente después de la dirección IP debe coincidir con la dirección proporcionada como patrón.
Las dos líneas combinadas se verían así en el archivo .htaccess:
ReWriteEngine on ReWriteRule ^quienessomos$ quienes_somos.html [NC]
¡Y listo!, ¡eso es todo! ¡Creaste con éxito una regla mod_rewrite!
Conclusión
Las URL sencillas, limpias y simples de usar juegan un papel vital para cualquier sitio web exitoso. Tener palabras clave es muy importante, no solo para que las URLs se puedan memorizar con facilidad, sino también para el SEO. Hay cientos de reglas que puedes crear y escribir. ¡Y ahora ya sabes cómo! ¡Esperamos que utilices mod_rewrite en tus proyectos!
Comentarios
June 30 2021
Hola, espero puedas ayudarme. Después de ejecutar el paso 3 que tiene que ver con colocar el bloque de instrucciones en 000-default.conf, al tratar de reiniciar el apache2 me lanza el siguiente error: Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details. root@SERVER:/var/www/html# systemctl restart apache2 Job for apache2.service failed because the control process exited with error code. Me podrías decir como solucionar esto?