Sign up with your email address to be the first to know about new products, VIP offers, blog features & more.

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 http://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 http://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?

Leer entrada anterior
¿Qué es la neutralidad de la red?

Os dejo un vídeo donde se explica qué es la neutralidad en la red, un término que aparece últimamente mucho...

Cerrar