Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/03/2010, 16:39
Avatar de destor77
destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
htaccess y MVC

Hola,
estoy teniendo problemas con mi mvc y las url amigables, este es mi .htacces
Código:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*).php$ index.php?controlador=$1 [L]
RewriteRule ^(.*)/(.*).php$ index.php?controlador=$1&accion=$2 [L]
RewriteRule ^(.*)/(.*)/(.*).php$ index.php?controlador=$1&accion=$2&id=$3 [L]
</IfModule>
y este codigo es como proceso las url para saber que cotrolador y accion se tiene que ejecutar
Código PHP:
Ver original
  1. if(strrpos($_SERVER['QUERY_STRING'],'/')){
  2.             $debug->info('entro con url amigables');
  3.             $uri = explode('/',$_GET['controlador']);
  4.             //obtengo el controlador
  5.             $controller = $uri[0];
  6.             if(isset($uri[1])) {
  7.                 $action = $uri[1];
  8.             }
  9.         }
  10.         else{
  11.             $debug->info('entro sin url amigables');
  12.             //obtengo el controlador que se envia por $_GET
  13.             $controller = $_GET['controlador'];          
  14. $debug->log($_GET);            
  15.             //obtengo la accion que se envia por $_GET
  16.             if(isset($_GET['accion'])) {
  17.                 $action = $_GET['accion'];
  18.             }
  19.         }

y entonces si yo entro a misiti.com/seccion/mostrar.php me lleva correctamente al controlador y la acccion.
Pero si yo quiero entrar a la administración misitio.com/admin
me intenta redireccionar a index.php?controlador=admin&accion=index
A esto lo soluicone (nose si es la mejor opcion) asi:
en el router:
Código PHP:
Ver original
  1. if(strrpos($_SERVER['QUERY_STRING'],'/')){
  2.             $debug->info('entro con url amigables');
  3.             $uri = explode('/',$_GET['controlador']);
  4.             $debug->info('entro con url amigables');
  5.             //obtengo el controlador
  6.             $controller = $uri[0];
  7.             if(isset($uri[1])) {
  8.                 $action = $uri[1];
  9.             }
  10.         }
  11.         else{
  12.             $debug->info('entro sin url amigables');
  13.             //obtengo el controlador que se envia por $_GET
  14.             $controller = $_GET['controlador'];          
  15. $debug->log($_GET);            
  16.             //obtengo la accion que se envia por $_GET
  17.             if(isset($_GET['accion'])) {
  18.                 $action = $_GET['accion'];
  19.             }
  20.         }        
  21.        
  22. $debug->info($controller,'controlador enviado');
  23. $debug->info($action,'accion enviada');      
  24.         //seteo el controlador si esta vacio seteo el controlador por default
  25.         if( empty($controller) || $controller=='admin') {
  26.             $controller = 'indexController';
  27.         }
  28.         else {
  29.             $controller = $controller.'Controller';
  30.         }
  31. $debug->info($controller,'controlador');
  32. $debug->info($action,'accion');

y en el directorio admin arme un .htaccess que tiene:
Código:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /rwa/admin
</IfModule>
pero ahora tengo otro problema, cuando quiero entrar al admin sin estar logueado me muestra, el formulario de login que es el siguiente:
Código HTML:
Ver original
  1. <div id="admin_wrapper">
  2.     <h1>Ingreso Administración</h1>
  3.    
  4.     <p>Bienvenido. Para iniciar sesión complete el formulario.</p>
  5.  
  6.     <?php
  7.     if($mensaje['mensaje']!=''){?>
  8.     <div class="<? echo $mensaje['tipo'];?>"><? echo $mensaje['mensaje'];?></div>
  9.     <?php
  10.     }
  11.     else{?>
  12.     <div class="<? echo $mensaje['tipo'];?>"><? echo $mensaje['mensaje'];?></div>  
  13.     <?php
  14.     }
  15.     ?>
  16.    
  17.     <form action="index.php?controlador=index&amp;accion=login" method="post">
  18.         <p><label>Nombre de Usuario</label>
  19.         <input name="username" type="text" class="input large" value="username" />
  20.       </p>
  21.        
  22.         <p><label>Contraseña</label>
  23.         <input name="password" type="password" class="input large" value="password" />
  24.  
  25.       </p>
  26.       <p><label>Código de Seguridad</label>
  27.       <img src="librerias/captcha.php" width="100" height="30" alt="Código de Seguridad"/></p>
  28.       <p><br/><input type="text" value="" class="input large" name="captcha"/>
  29.       </p>
  30.      
  31.      
  32.       <p><input type="submit" name="Submit" id="button" value="Ingresar"  class="button"/></p>
  33.     </form>
  34. </div>
pero dejo de mostrarme la imagen del captcha (el scr de la imagen es ../librerias/ si lo pongo entre comillas me sale la url del foro) y en el firebug me muestra que el server[query_string], el controlador y la accion a buscar son:
Cita:
controlador: libreriasController
accion: index
Query String: controlador=librerias/index
la verdad que ya no entiendo que pasa..... si alguien me puede guiar un poco.... desde ya muchas gracias

Última edición por destor77; 30/03/2010 a las 16:55