CodeIgniter: mod_rewrite


El 30 Marzo 2008 – 16:17 | por Isern Palaus

Uno de los principales inconvenientes de CodeIgniter es, en parte, visual en la dirección URL. Solemos tener nuestros programas con http://localhost/index.php/controlador/funcion y seguramente quedaría mucho mejor algo tipo: http://localhost/controlador/funcion, ¿verdad? Pues bien, para hacer esto necesitaremos usar Apache y el modulo mod_rewrite.

Para empezar será necesario saber si estamos usando mod_rewrite en Apache. Lo más fácil es, directamente, ir al archivo de configuración (el archivo http.conf) y buscar: mod_rewrite.so. Deberíamos encontrar la siguiente línea:

[code]LoadModule rewrite_module modules/mod_rewrite.so[/code]

Sin embargo, si esta contiene un símbolo de almohadilla (#) es que no esta activado. Si lo contiene al principio, lo borramos, guardamos y reiniciamos el servidor. Así, mod_rewrite se iniciará cada vez al iniciar Apache.

Ahora es el momento de crear nuestro archivo de configuración especifico en el directorio donde este nuestro index.php. A este archivo le pondremos de nombre .htaccess y contendrá lo siguiente:

[code lang="php"]
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]


# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin

ErrorDocument 404 /index.php
[/code]

Bien, con esto ya nos ocupamos de cuando se acceda a nuestra web automáticamente, lo que hace el servidor web, es catalogar como si accediéramos a la misma pero con index.php/ al principio. Solo nos queda una cosa, que CodeIgniter nos construya los enlaces sin el index.php/. De este modo, accedemos al archivo config.php y cambiaremos la variable $config['index_page']:
De:
[code lang="php"]
$config['index_page'] = "index.php";
[/code]

A:
[code lang="php"]
$config['index_page'] = "";
[/code]
Y esto es todo para tener unas direcciones URL mucho más limpias. Espero que les haya ayudado de nuevo y hasta pronto.

Tags: , , , ,

  1. 6 Comentarios a “CodeIgniter: mod_rewrite”

  2. Por Lagarto el May 20, 2008 | Responder

    Esta muy bien este tutorial seguro que a mucha gente le viene de fabula. También iria muy bien ya que se usa htaccess a restringir el acceso a segun que carpetas (es decir a todas menos el application).

    Un saludo!

    pd:perdon pero le di al enviar sin querer mientras escribia

  3. Por Santiago el Jul 9, 2008 | Responder

    Yo probe el .htaccess y no me funciono bien, me decia “No input file specified” asi que busque y lo q si me funciono bien fue esto:
    [code]
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?$1 [L]
    [/code]
    Fuente:http://codeigniter.com/wiki/Dreamhost_.htaccess/

    Lo segundo estuvo interesante, gracias!

  4. Por davidh el Nov 19, 2008 | Responder

    Perfecto santiago, habia tenido problemas con el rewrite -el que todo mundo dice que funciona- la solucion presentada me funcionó a la perfeccionó en mi hosting (dattatec).

  5. Por Paco Guzman el Jul 3, 2009 | Responder

    Muchas gracias igual hicimos una actualización en el server y ya no jalo el codeigniter, muchas gracias por estas lineas. Regresaron a la vida nuestro sitio

  6. Por David el Jul 26, 2009 | Responder

    muy bueno…

    cómo podría construir una url como metroflog o fotolog

    hasta ahora tengo algo asi en codeigniter

    http://www.miweb.com/index.php/usuarios/nombre_usuario

    Gracias a tu post, he logrado

    http://www.miweb.com/usuarios/nombre_usuario

    ocultar el index, pero cómo logro ocultar el controlador usuarios y quede de la siguiente manera

    http://www.miweb.com/nombre_usuario

    donde nombre_usuario

    seria el parametro para ejecutar el constructor de mi controlador usuarios

    Gracias de antemano. Saludos

  1. 1 Trackback(s)

  2. Sep 18, 2009: Habilitar mod_rewrite de Apache2 en Ubuntu « Anger Rising

Dejar un comentario