lunes, 25 de agosto de 2014

Configurar mod_rewrite para Kumbia y CakePHP

Kumbia y CakePHP son dos frameworks MVC (Modelo Vista Controlador) para PHP muy populares y bastante similares. Para empezar a utilizar ambos, es requisito fundamental instalar Apache y realizar algunos ajustes en la configuración. El ajuste más crítico es el de mod_rewrite, el cual permite a Apache gestionar los direccionamientos (routings) generados por estos frameworks.

Para realizar esta configuración, es necesario configurar el archivo httpd.conf. Nota: en el caso de una instalación en distribuciones basadas en Ubuntu, es posible que no exista este archivo. Ello se debe a que está configurado para que utilice el archivo apache2.conf en su lugar).

LoadModule rewrite_module modules/mod_rewrite.so

Más adelante, en el mismo archivo, encontraremos una sección como ésta:

<Directory />
   ...
</Directory>

Esta sección configura los permisos o roles que tendrá, para apache, el acceso al directorio especificado y a sus subcarpetas. En este caso comenzaría en el directorio raíz del equipo, lo cual es muy crítico y peligroso. Por ello, debemos definir (si no lo tenemos ya), una sección que apunte al directorio de nuestra aplicación Kumbia o CakePHP, el cual suele ubicarse en el directorio principal de páginas Web de Apache. En su interior deberíamos tener la siguiente configuración:

<Directory "/var/www/miaplicacionweb">
   Options FollowSymLinks
   AllowOverride All
   Require all granted
</Directory>

Una vez hechos los cambios, se guarda el archivo y se reinicia el servidor Apache para que reconozca la nueva configuración:

sudo /etc/init.d/apache2 start

Con esto debería funcionar el routing de nuestras aplicaciones.

Posibles problemas

Si al lanzar el contenido de la aplicación da problemas con mod_rewrite, puede ser que la ruta del archivo mod_rewrite.so no sea la correcta. En ese caso hay buscar la ruta del mismo con:

$ locate mod_rewrite.so

ó con

$ sudo find / find -name mod_rewrite.so

y modificar el archivo httpd.conf (o apache2.conf, si es el caso), con la ruta correcta.

Si aún así sigue teniendo problemas, es posible que PHP no esté utilizando el módulo mod_rewrite. Para saberlo, lanzar una página phpinfo() y buscar el literal "mod_rewrite". Debería aparecer en una sección llamada "Configuration apache2handler", en la fila "Loaded Modules". Si no aparece, podemos instalar el módulo mediante el siguiente comando:

$ sudo a2enmod rewrite

Si a pesar de todo lo anterior, sigue sin funcionar, puede ser que Apache esté configurado para utilizarse como servidor virtual. En ese caso, la configuración de Apache sale del fichero de configuración alojado en /etc/apache2/sites-available. En dicho directorio habrá dos ficheros: 000-default.conf y default-ssl.conf. Si no se ha instalado o configurado Apache para utilizar protocolo SSL, editaremos el primer archivo y lo configuraremos como el httpd.conf. En el caso de utilizar el protocolo SSL, configuraremos el segundo archivo.

Tras realizar los cambios, habrá que reiniciar el servidor Apache y debería funcionar todo.