Quitar el "index.php" de las direcciones de CodeIgniter
Uno de los pasos que tarde o temprano hacen los usuarios de CodeIgniter es quitar el famoso "index.php" de sus url's.
Para eso nada mas sencillo que seguir las instrucciones que dan en la documentación, es decir, añadir al .htaccess que esta en el directorio de instalación de CodeIgniter (al mismo nivel que application) las siguientes lineas:
Pero esta condición es insuficiente en la mayoría de los casos y habrá que modificar estas lineas:
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
añadiendo los subdirectorios a los que pueda llamar nuestra aplicación, así como el directorio raíz de instalación del codeigniter. Yo ,por ejemplo, tengo el codeigniter en un directorio llamado /fifa y otros subdirectorios donde almaceno archivos de mi web, como /imagenes, /css y /menu, entonces en mi caso quedaria así:
RewriteEngine on
RewriteCond $1 !^(index\.php|imagenes|robots\.txt|css|menu)
RewriteRule ^(.*)$ /fifa/index.php/$1 [L]
Y mas...
Edito este articulo para añadir la resolución de otro problema. Al ir a cambiar de versión de php en el servidor web, concretamente en aruba.it y a la versión de php 3.5.10, no cargaba la aplicación correctamente, solo me funcionaba la pagina principal y solo si escribía el index.php en la URL. Parecía pues un error de interpretación de .htaccess... nada mas lejos de la realidad, nada tenia que ver Apache si no la configuración de esta nueva versión de php. Preguntando a San Google, encontré la solución en el blog de un "colega", cuya dirección dejo aquí:
http://www.terencechang.com/2008/08/28/codeigniter-no-input-file-specified-php-5-apache-2/
Pasado por el traductor de google dice esto:
Sólo se encontró con un problema en mi servidor de alojamiento compartido, que se está ejecutando PHP5 como CGI en modo de Apache 2.2 de acuerdo a phpinfo (). Se produce un error cuando accedo a la página. "No Input file specified!" Ahora el problema está resuelto!No tengo ningún problema para ejecutar la aplicación en mi local, ordenador portátil basado en XP, que se ejecuta PHP5 como módulo de Apache. Obviamente, es un error de Apache. Después de alcanzar en Internet y encontré la solución. Si se está ejecutando en PHP5 de Apache 2.2 como modo CGI, que muchas de alojamiento web de la empresa establece de forma predeterminada, Apache no va a apoyar "PATH_INFO" dentro de CodeIgniter. Con el fin de resolver el problema, las soluciones es muy simple!Hay dos soluciones. No importa cuál elija, siempre tendrá el mismo paso 1.Paso 1: Obviamente, PHP se ejecuta en modo CGI tiene por defecto cgi.fix_pathinfo a 1. Basta con abrir / system / application / config / config.php y asegurarse de que las siguientes dos opciones están definidas.
$config['index_page'] = “”;
$config['uri_protocol'] = “AUTO“;
Y así efectivamente he solucionado el problema, solo que con la opción 2, pues no tengo acceso al php.ini.
Ademas, en mi caso en htaccess he tenido que añadir "?" detrás de todos y cada uno de los "index.php" .
Ciao.
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
...pero ha sido tan sencillo como esto? Pues no.
Empecemos por explicar, mas o menos, que lo que hace el archivo .htaccess:
.htaccess hace de filtro entre lo que escribe el usuario en la barra de dirección del navegador y el servidor web.
En concreto, lo que las lineas de antes hacen, es redireccionar todas las peticiones de usuario, añadiendo el index.php, menos las propias que contengan index\.php ó images ó robots\.txt.Pero esta condición es insuficiente en la mayoría de los casos y habrá que modificar estas lineas:
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
añadiendo los subdirectorios a los que pueda llamar nuestra aplicación, así como el directorio raíz de instalación del codeigniter. Yo ,por ejemplo, tengo el codeigniter en un directorio llamado /fifa y otros subdirectorios donde almaceno archivos de mi web, como /imagenes, /css y /menu, entonces en mi caso quedaria así:
RewriteEngine on
RewriteCond $1 !^(index\.php|imagenes|robots\.txt|css|menu)
RewriteRule ^(.*)$ /fifa/index.php/$1 [L]
Y mas...
Edito este articulo para añadir la resolución de otro problema. Al ir a cambiar de versión de php en el servidor web, concretamente en aruba.it y a la versión de php 3.5.10, no cargaba la aplicación correctamente, solo me funcionaba la pagina principal y solo si escribía el index.php en la URL. Parecía pues un error de interpretación de .htaccess... nada mas lejos de la realidad, nada tenia que ver Apache si no la configuración de esta nueva versión de php. Preguntando a San Google, encontré la solución en el blog de un "colega", cuya dirección dejo aquí:
http://www.terencechang.com/2008/08/28/codeigniter-no-input-file-specified-php-5-apache-2/
Pasado por el traductor de google dice esto:
Sólo se encontró con un problema en mi servidor de alojamiento compartido, que se está ejecutando PHP5 como CGI en modo de Apache 2.2 de acuerdo a phpinfo (). Se produce un error cuando accedo a la página. "No Input file specified!" Ahora el problema está resuelto!No tengo ningún problema para ejecutar la aplicación en mi local, ordenador portátil basado en XP, que se ejecuta PHP5 como módulo de Apache. Obviamente, es un error de Apache. Después de alcanzar en Internet y encontré la solución. Si se está ejecutando en PHP5 de Apache 2.2 como modo CGI, que muchas de alojamiento web de la empresa establece de forma predeterminada, Apache no va a apoyar "PATH_INFO" dentro de CodeIgniter. Con el fin de resolver el problema, las soluciones es muy simple!Hay dos soluciones. No importa cuál elija, siempre tendrá el mismo paso 1.Paso 1: Obviamente, PHP se ejecuta en modo CGI tiene por defecto cgi.fix_pathinfo a 1. Basta con abrir / system / application / config / config.php y asegurarse de que las siguientes dos opciones están definidas.
$config['index_page'] = “”;
$config['uri_protocol'] = “AUTO“;
Solutions 1:
Step 2: Create a customized PHP.INI file under the root directory of your site with the following line.
Step 2: Create a customized PHP.INI file under the root directory of your site with the following line.
cgi.fix_pathinfo = 0;
Solutions 2:
Step 2: Go to .htaccess file and add question mark after index.php and before slash.
Step 2: Go to .htaccess file and add question mark after index.php and before slash.
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L]
Personally, I choose the Solution 1 with PHP.INI. It seems to run faster. Problem solved!
Y así efectivamente he solucionado el problema, solo que con la opción 2, pues no tengo acceso al php.ini.
Ademas, en mi caso en htaccess he tenido que añadir "?" detrás de todos y cada uno de los "index.php" .
Ciao.
Comentarios
Publicar un comentario