New question

Question:

Date: 27-05-2016 10:31:48 (In Spanish)

Internalización de URL en CodeIgniter[Unresolved]

Hola comunidad tengo un problema y no se como resolver. Estoy trabajando con CodeIgniter, quiero hacer mis urls amigables y le he quitado el index.php, para esto cree un archivo .htaccess con el siguiete código:
AddDefaultCharset utf-8
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|shared||robots.txt)
RewriteRule ^(.*)$ /mi_dominio/index.php/$1 [L]


después fui al config y puse esto:
$config['index_page'] = '';
, todo iba bien y navegaba sin el index.php.

Pero ahora quiero que mi sitio sea multilenguaje, para esto agregué el helper: language, etc. y puse en mi archivo route esto:
$route['default_controller'] = 'Apps';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

// example: '/en/about' -> use controller 'about'
$route['^fr/(.+)$'] = "$1";
$route['^en/(.+)$'] = "$1";
$route['^es/(.+)$'] = "$1";

// '/en' and '/fr' -> use default controller
$route['^fr$'] = $route['default_controller'];
$route['^en$'] = $route['default_controller'];
$route['^es$'] = $route['default_controller'];


Ahora bien, si pongo mi url sin el index.php me dice que no se encuentra el camino en el server, sin embargo, cuando pongo la misma url con el index.php me muestra bien la pagina.

Url buena: http://localhost/mi_dominio/index.php/es/mi_controller/mi_function/mi_parametro
Url mala: http://localhost/mi_dominio/es/mi_controller/mi_function/mi_parametro

De ante mano muchas gracias.
Tags: CodeIgniter - Framework - htaccess - Internationalization - PHP - Question - URL Friendly Votes: 2 - Answers: 3 - Views: 19 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 30-05-2016 16:02:56 Puedes Intentar
    $route['fr/([a-z0-9/-]+)'] = "$1";
    Pero más allá de eso hay que tener cuidado de usar el framework de esa manera, con esa forma de declarar permites que se pase cualquier parámetro a las funciones, por ejemplo, un controlador con funcion users que sólo debe tener como parámetro un número, esa sentencia permite que se pase letras y con extrema libertad, estas desaprovechando la seguridad que te da codeIgniter en los routes. Usa ^ al principio para concatenar opciones y no poner n lineas por idioma
    $route['^(en|es|de)/([a-z0-9/-]+)'] = "$1";
    , adicionalmente deberías escribir de manera explícitas los controladores, para mayor entendimiento de las rutas (eso se agradece cuando meses más adelante se hace mantenimiento del mismo). Aunque se pueda usar patrones regulares para indicar rutas, en ocasiones da problemas como en este caso por poner ese carácter de manera aislada al principio, si no se define de manera correcta el .htaccess (deberías revisarlo cuando tengas chance, es posible que se pueda mejorar a mi me ocurría mucho porque se pasaba el / en la ruta relativa y como ponía ^ ninguna ruta coincidía)
      Votes: 1 - Link answer
     
  • Date: 01-06-2016 09:27:30 Hola Junior, muchas gracias por tu respues pero lamentablemente no me funcionó, si pongo la url siguiente url: http://localhost/mi_dominio/index.php/es/mi_controller/mi_function/mi_parametro con el 'index.php' sí me funciona, pero cuando le pongo http://localhost/mi_dominio/es/mi_controller/mi_function/mi_parametro no me funciona, dice que no encuentra la ruta en el servidor   Votes: 0 - Link answer
     
  • Date: 05-06-2016 09:26:08 En el htaccess estás poniendo como condición que exista index.php, elimina la linea de RewriteCond y prueba debería funcionar, para admitir imágenes, robots, etc, deberías crear otra regla en el htaccess, por ejemplo fíjate en este htacess que sólo valida y da seguridad a los archivos de tu codeIgniter y elimina el index.php:
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_URI} ^system.*
        RewriteRule ^(.*)$ /index.php/$1 [L]
    
        RewriteCond %{REQUEST_URI} ^application.*
        RewriteRule ^(.*)$ /index.php/$1 [L]
    
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        rewriteRule ^([a-zA-Z0-9-/]*)$ index.php/$1 [L]
    </IfModule>
    
    <IfModule !mod_rewrite.c>
    </IfModule>
    
    , si quieras que sólo una determinada cantidad de recursos multimedia puedan ser solicitados (por ejemplo sólo PDF y JPG, de resto otra cosa como PNG tendrían acceso restringido) debes crear otra regla aparte, con el rewritecond que tienes (recuerda no debe estar index.php en la condición)
      Votes: 2 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com