URLs amigables en Yii

Siguiendo con los tutoriales de Yii, hoy vamos a ver como conseguir urls amigables, urls limpias o seo friendly urls…como les guste llamarles.

Si vieron los anteriores articulos de Yii habran notado que las urls son feas, siempre llevan un ‘index.php?r=’ y vamos a mejorar eso.

Son 3 pasos:

Paso 1- Activar mod_rewrite en apache

Por defecto ya deberian tenerlo activado, la mayoria de los hosting lo tienen activado, asi que este paso en general puede saltearse. Pero si no esta activado entonces pueden usar el siguiente comando en distos basadas en Debian/Ubuntu:

a2enmod rewrite

En Arch linux habria que editar el archivo /etc/httpd/conf/httpd.conf y agregar lo siguiente:

LoadModule rewrite_module modules/mod_rewrite.so

Al final de donde estan todos los ‘LoadModule’.

En ambos casos habra que reiniciar el apache para que los cambios surjan efecto. O reiniciar la pc.

URLs yii

Paso 2- En su aplicacion deberan editar el archivo main.php que se encuentra en protected/config. Alli encontraran una seccion comentada que dice asi:

/*
		'urlManager'=>array(
			'urlFormat'=>'path',
			'rules'=>array(
				'/'=>'/view',
				'//'=>'/',
				'/'=>'/',
			),
		),
		*/

La descomentan para que quede asi:

'urlManager'=>array(
			'urlFormat'=>'path',
			'showScriptName'=>false,
			'rules'=>array(
				'/'=>'/view',
				'//'=>'/',
				'/'=>'/',
			),
		),

Como veran ademas de descomentarla le agregue una linea, la que dice ‘showScriptName’.

Paso 3- En la raiz de su aplicacion deben crear un archivo .htaccess con el siguiente contenido:

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

Presten atencion y fijense que el archivo .htaccess no se crea dentro de la carpeta ‘protected’ donde ya hay un .htaccess sino en el directorio superior a ese.

Bueno, eso seria todo. Tomando como ejemplo el Hola mundo en Yii que hicimos hace tiempo. La url a la que habia que acceder era

http://localhost/testyii/index.php?r=site/index

Y ahora es:

http://localhost/testyii/site/index

Mucho mas simple y bonito verdad?

perro

Ingeniero en Informática. Programador en PHP y Angular. Lo que mas adoro en el mundo es el conocimiento. Y el anime....y Japón...y el running...y bloguear claro y algunas otras cientos de cosas. Sigo buscando la manera de hacer mi primer millón.
guest
3 Comments
Inline Feedbacks
View all comments
licosi

Gracias por el tutorial esta muy bien detallado, sin embargo se me presento un problema. Creo el archivo .htaccess y lo guardo en el directorio raiz pero al cargar la pagina me sale el error 404 error «Page not found»·. ¿Podrías ayudarme?

cgonzalez

tengo el mismo problema pero trabajo en ubuntu, alguna solución.

Angel

El archivo .htaccess tiene que ir en la carpeta raiz con el nombre de su app, ejemplo html/nombreapp (aqui), o si lo tienen en la carpeta yii seria html/yii/nombreapp