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?
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.
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! ;-)
MUY bueno! 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
Perfecto todo, de mucha ayuda, claro y muy correcto.
Gracias.
Muy bien explicado todo, me sirvió el post.
Gracias!