Ya habiendo hecho varias pruebas con Yii Framework, el framework de php que estoy utilizando para el desarrollo de aplicaciones, apareció el tema de las url amigables, por lo que me dispuse a buscar algo acerca del tema.. pocos minutos después de preguntarle a los buscadores llegué de manera inmediata a un tutorial desde la misma página de Yii, donde indican como hacer que los parametros enviados por la url se conviertan en url más claras y hasta entendibles por los humanos.. pues bueno, todo funciono como lo esperaba en windows (wampserver), pero en linux no me fue tan bien ya que tuve algunos problemas, los cuales trataré de describir y explicar sus soluciones.
Básicamente el tutorial dice que Yii de manera predeterminada crea enlaces de la siguiente manera:
/index.php?r=controlador/vista¶metro=100
Pero que estos se pueden mejorar seteando las propiedades del componente urlManager, a lo cual los enlaces quedarían asi:
/index.php/controlador/vista/parametro/100
OK.. hasta aqui vamos bien y segun el tutorial todo funcionó sin problemas.. pero lo que sigue se vuelve más interesante ya que yo no quería que se viera la página index.php, entonces continuando con el tutorial dicen que podemos reescribir algunas reglas de la consulta por URL.. seteando nuevamente parametros del urlManager, esta propiedad específicamente es “showScriptName=false”, que por omisión esta en true y esto se supone debería esconder la página index.php y para que funcione también es necesario escribir también en el .htaccess lo siguiente:
Options +FollowSymLinks IndexIgnore * RewriteEngine on # if a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # otherwise forward it to index.php RewriteRule . index.php |
Y hasta aqui.. o al menos en windows con wamp server, funcionó sin problemas.. las url se volvieron mucho más accesibles, pero al migrar la aplicación a linux algo malo sucedió y no estaban funcionando las url amistosas, de hecho el .htaccess no se estaba leyendo por lo que segun la experiencia recorde que me hacía falta modificar algo al apache..
La Solución..
1.- En linux, específicamente apache2 por omisión no permite los .htaccess personalizados por lo que es necesario modificar el archivo de /etc/apache2/sites-available/default hay que ubicar la línea AllowOverride que inicialmente trae el valor none.
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>
Y con esto ya permitimos el uso del .htaccess personalizados..
2. Los errores continuaron persistiendo, mi archivo .htaccess modificaba algunas reglas del servidor y el módulo requerido no estaba activo.. entonces habría que activarlo, esto desde la línea de comandos..
$ sudo a2enmod rewrite $ sudo /etc/init.d/apache2 restart |
Y con esto las reglas del .htaccess que inician con RewriteRule ya se pueden utilizar, genial al hacer el intento nuevamente en mi navegador y ver si la aplicación ya aceptaba los url amigables.. voilá.. funcionaron..
El componente urlManager de Yii Framework permite modificar o reescribir la manera en que los enlaces son entregados al navegador, realmente es un tema muy útil para quienes se preocupan mucho por el tema de SEO (Seach Engine Optimizer), este post es básicamente un How-to de como hacer funcionar esta practica en servidores basados en linux y el componente puede lograr más de lo que he escrito.
Tutorial completo de como implementar Friendlys URL’s con Yii Framework
http://www.yiiframework.com/doc/guide/topics.url
Hola, buen dia y gracias por el post.
Disculpa, pero no puedo hacer que funcione mi app (Solo se ve una pantalla blanca y el firebug manda un error 500 Internal Server Error). Supuse que se trataba de algun problema en la configuracion de apache, ya que en XAMPP funciona correctamente, pero al probar esto no me resolvio el problema y con una aplicacion nueva no tengo ningun problema para visualizarla. Alguna sugerencia extra?. Estoy en Ubuntu 13.10
PD: El archivo /etc/apache2/sites-available/default no existia asi que lo cree con las lineas que mencionaste.