Categorías: Tutoriales

Instalar mod_rewrite en Apache. Los Pretty Permalinks se resisten

Es posible que si habéis probado a usar enlaces permanentes (permalinks) sobre Apache os hayáis encontrado con este problema, me refiero a el caso de los conocidos como Pretty Permalinks, en los que la forma más usual de usarlos es https://www.linuxhispano.net/año/mes/día/nombre-de-la-entrada/, en resumidas palabras son el Santo Grial de los enlaces permanentes, muy usados en los Blogs.

El caso que os enuncio a continuación es el de la instalación del CMS WordPress sobre una máquina Ubuntu 10.04, aunque la metodología es completamente aplicable a cualquier uso de las directivas dentro de .htaccess sobre cualquier máquina que corra Apache2 y cualquier sistema sobre él mismo.

En este caso tenemos nuestro sistema WordPress ya instalado sobre el directorio /var/www/, nos dirigimos al panel de administración, y dentro del menú Settings, en Permalinks. En este caso, lo que queremos es usar los Pretty Permalinks, así seleccionaremos, por ejemplo:

Day and name https://www.linuxhispano.net/2010/11/24/sample-post/

Entonces, guardamos los cambios y podemos encontrarnos con el error de que no se ha podido escribir el archivo .htaccess en la raíz del directorio. Este tiene la siguiente forma:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Lo que indica este fichero es que las peticiones por GET que se realicen bajo el index.php sean sustituidas por barras simples /, obteniendo de esta manera una URL más elegante.

Para darle permisos a WordPress para escribir en el directorio (nota: estos permisos también sirven para la actualización e instalacion de plugins), tenemos dos opciones. Nos dirigimos a la entrada que escribió Carazo sobre los permisos en los directorios de WordPress o cambiamos los permisos del directorio completamente haciendo uso del usuario de Apache. Para hacerlo de la segunda forma:

sudo chown -R www-data:www-data /var/www

www-data es, por defecto, el nombre de usuario de Apache, así, nos despreocupamos en adelante de permisos sobre el directorio /var/www/.

Bien, haciendo este cambio ya tenemos permisos para generar el archivo .htaccess desde el CMS, ahora, y una vez activado nos damos cuenta de que sigue sin funcionar, en este caso no se nos avisa de que el cambio no haya surtido efecto ya que WP si ha podido escribir el fichero, pero es Apache quien no logra interpretarlo, de ahí que los enlaces no funcionen.

Una de los problemas que podemos tener es que el módulo mod_rewrite no este activado / instalado, para hacerlo tenemos dos posibilidades. Las dos son igualmente aceptables, ya dependerá de cómo queremos hacerlo:

Instalación sencilla de mod_rewrite

Sencilla, y mucho:

ahornero@6581-D:~$ sudo a2enmod rewrite

Y reiniciamos el servidor:

ahornero@6581-D:~$ sudo /etc/init.d/apache2 restart
[sudo] password for ahornero:
* Restarting web server apache2 … waiting [ OK ]

Instalación menos sencilla de mod_rewrite

Usamos el comando locate para buscar si el módulo mod_rewrite.so está disponible en nuestro servidor:

ahornero@6581-D:~$ updatedb
ahornero@6581-D:~$ locate mod_rewrite.so

En en caso de Ubuntu 10.04 LTS lo encontraremos en /usr/lib/apache2/modules. Ahora nos dirigimos al directorio mod-enabled y tenemos nuevamente dos opciones, o creamos un enláce simbólico al archivo (con ln -s) o:

ahornero@6581-D:~$ cd /etc/apache2/mods-enabled
ahornero@6581-D:~$ touch rewrite.load
ahornero@6581-D:~$ nano rewrite.load

Y pegamos la siguiente línea (usando las rutas que antes hemos visto):

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

Y reiniciamos el servidor (se hace evidente):

ahornero@6581-D:~$ sudo /etc/init.d/apache2 restart
[sudo] password for ahornero:
* Restarting web server apache2 … waiting [ OK ]

Continuación de la instalación

Bien, de una forma u otra ya hemos instalado el módulo de Apache mod_rewrite, ahora si probamos nuestra Web es posible que nos funcione o no. En caso de no hacerlo, no va a ser por no tener activado este módulo, evidentemente podemos comprobarlo creándonos un fichero PHP, por ejemplo php_info.php, y haciendo una llamada a la función phpinfo(); así veremos cómo el módulo está activado.

Lo más seguro es que la directiva AllowOverride esté deshabilitada dentro del marco en que nos encontramos, es decir, sobre el directorio /var/www definido dentro del archivo de configuración de Apache. Para solucionarlo, bastará con editarlo de la siguiente manera:

Para Ubuntu 10.04:

ahornero@6581-D:~$ sudo gedit /etc/apache2/sites-available/default

Y lo editamos, de forma que el tag Directory para la ruta /var/www (o la que corresponda en vuestro caso) quede de la siguiente manera:

Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all

Siendo clave el tema del AllowOverride all, ya que esto es lo que da o no paso a la configuración mediante ficheros .htaccess dentro del directorio sobre el que nos ubicamos.

De igual manera lo haremos sobre cualquier distribución sobre el fichero de configuración, comúnmente http.conf, dentro del directorio /etc/apache2/conf/

Y bien, sea cual sea nuestro caso, hemos de reiniciar el servidor Apache para que los cambios surtan efecto:

ahornero@6581-D:~$ sudo /etc/init.d/apache2 restart
[sudo] password for ahornero:
* Restarting web server apache2 … waiting [ OK ]

Y listo. ¿Alguna duda?

Alberto Hornero Luque

Contínuamente relacionado con el procesamiento de imágenes y el análisis numérico, se encuentra actualmente trabajando como Ingeniero Técnico en el laboratorio de Métodos Cuantitativos de Teledetección del CSIC. Administrador del portal Linux Hispano centra sus intereses en tecnologías abiertas, desarrollos en la nube y GNU/Linux, y hace poco fundó junto a Javier Carazo una startup, Codection. Puedes seguir sus updates en @ahornero y LinkedIn.

Ver comentarios

  • Genial entrada.

    Gracias a esta información (a tu ayuda directa aplicándola) me has quitado de estar peléandome con Scientific Linux durante horas esta mañana...

  • No sabes lo útil que me ha resultado este artículo. He intentado hacer lo del .htaccess para poder poner los permalinks de wordpress amigables un montón de tiempo y a través de otros tutoriales no me salía y gracias a este SÍ!!

    Se agradece lo claro de la información y las alternativas, para todos los niveles, sin duda alguna muchísimas gracias! ;-)

  • Excelente.... acabo de instalar ubuntu en mi pc del trabajo y no lograba habilitar ese módulo!! gracias por tu valiosa ayuda...

  • Hola, Lo que has hecho me parece fantástico.

    Hace nada instalé Apache y estoy aprendiendo mucho.
    Gracias por tu ayuda

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

4 semanas hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace