Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] lanzar direccion real

Estas en el tema de lanzar direccion real en el foro de PHP en Foros del Web. Hola amigos. Estroy medio cabezon con esta situacion. Estoy capturando la url de una carpeta con un .htaccess de la siguiente forma @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 28/01/2014, 07:48
 
Fecha de Ingreso: diciembre-2011
Mensajes: 45
Antigüedad: 12 años, 4 meses
Puntos: 1
Exclamación lanzar direccion real

Hola amigos.

Estroy medio cabezon con esta situacion. Estoy capturando la url de una carpeta con un .htaccess de la siguiente forma

Código Apache:
Ver original
  1. # Activar RewriteEngine
  2. RewriteEngine on
  3.  
  4. RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

como se dan cuenta, se pasa por get la url a un gestor de url programado en php. hasta ahi todo bien. pero quiero que si no hay coincidencias con la url en el gestor, simplemente haga lo que haria de forma predeterminada.

ejemplo:

en el gesto registro modulo/articulo, pero llega la url scripts/scripts.php el cual no esta registrado, entonces el sitio simplemente me lanza lo que normalmente haria dicho script.

cabe aclarar que no solo serian scripts php, sino imagenes, css, pdf y una cantidad indefinidad de diversos formatos.

muchisimas gracias y quedo al tanto
  #2 (permalink)  
Antiguo 28/01/2014, 11:23
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: lanzar direccion real

Hola, podrias usar algo asi:
Código Apache:
Ver original
  1. # Carpetas de las cuales vas a servir directamente todos los archivos:
  2. RewriteCond %{REQUEST_URI} !^(lib|img|ajax|cache|includes|lang|css|images|js|ws)/(.*)$
  3. # Extenciones de archivos que vas a servir directamente de la carpeta base:
  4. RewriteCond %{REQUEST_URI} !^([A-Za-z_-]*).(jpg|css|png|gif|js)$
  5. # Extenciones de archivos que vas a servir directamente desde cualquier carpeta:
  6. RewriteCond %{REQUEST_URI} !^(.*)/([A-Za-z_-]*).(jpg|css|png|gif|js)$
  7. RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

Edito:
Si en tu script validas que la url no existe puedes usar la funcion header para redireccionar.
Aunque, si estas usando un sistema en que manejas las url por un script, te recomiendo personalizar bien el ejemplo que te paso y devolver un 404 en caso de que no este la pagina registrada, ya que sino, tendras url reales, url ficticias/amigables, urls registradas y a la larga, cuando el proyecto crezca, se hara dificil de administrar, mejor haz que pase todo por un mismo lugar.

Solo un consejo, tu haz lo que quieras. saludos.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 28/01/2014 a las 11:29
  #3 (permalink)  
Antiguo 28/01/2014, 11:49
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: lanzar direccion real

Holas,

Y si en el mismo index.php validas si existe la ruta recibida?, por ejemplo:

Código PHP:
Ver original
  1. if (!file_exists($url)) {
  2.  // hacer un proceso A
  3. } else {
  4.  // hacer un proceso B
  5. }

Ya nos cuentas como te resulta,

Saludos,
__________________
.: Gildus :.
  #4 (permalink)  
Antiguo 28/01/2014, 14:55
 
Fecha de Ingreso: diciembre-2011
Mensajes: 45
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: lanzar direccion real

muchas gracias NSD, pero por alguna razon que no entiendo, no me funciona los condicionales. = lo solucione salzando los archivos de esas carpetas usando un script que desarrolle.

muchas gracias

aqui dejo el script por si a alguien lo saca de lios

Código PHP:
Ver original
  1. $mainMimeTypes=array(//las cabeceras mas comunes
  2.     '.zip'=>'application/zip',
  3.     '.mp3'=>'audio/mpeg3',
  4.     '.ogg'=>'video/ogg',
  5.     '.mp4'=>'video/mp4',
  6.     '.css'=>'text/css',
  7.     '.js'=>'application/x-javascript',
  8.     '.png'=>'image/png',
  9.     '.jpeg'=>'image/jpeg' ,
  10.     '.jpg'=>'image/jpeg' ,
  11.     '.svg'=>'image/svg+xml',
  12.     '.pdf'=>'application/pdf',
  13.     '.swf'=>'application/x-shockwave-flash',
  14.     '.gif'=>'image/gif',
  15.     '.xml'=>'application/xml',
  16.     '.htm' =>'text/html',
  17.     '.html' =>'text/html');
  18.  
  19.  
  20.     function launchFile($path,$mainMimeTypes){
  21.  
  22.         $pathinfo = pathinfo($path);//obtengo la informacion del path
  23.         $ext = $pathinfo['extension'];//obtengo la extension del archivo
  24.         if(file_exists($path) && $ext != ''){//pregunto si el path existe y si apunta a un archivo al preguntar por la existencia de extension
  25.  
  26.  
  27.             if($ext == 'php'){//si es un archivo php, de hago include para que se ejecute
  28.                 include($path);
  29.             }else{// sino
  30.                
  31.                 $contentType='';//inicio en blanco la variable
  32.                
  33.                 if(isset($mainMimeTypes['.'.$ext])){//pregunto si esta registrado en el array de content type
  34.  
  35.                     $contentType=$mainMimeTypes['.'.$ext];  //igualo el valor si existe
  36.  
  37.                 }else{//sino
  38.                     //incluimos un .php con los mime types que faltaban. no los incluyo desde el comienzo para no sobrecargar el script, pues el 90% de los casos estan en el array del comienzo
  39.                     include('aux/mimeType.aux.php');//incluyo el script que contiene el array de tooooodos los contetnt type (o por lo menos todos los que pude encontrar)
  40.  
  41.                     if(isset($mimeTypes['.'.$ext])){//vuelvo a buscar si la extesion corresponde a un index del array
  42.  
  43.                         $contentType=$mimeTypes['.'.$ext];  //igualo
  44.  
  45.                     }else{//sino
  46.  
  47.                         foreach ($mimeTypes2 as $key => $value) {//para este segundo array los index contienen varios tipos de extension asi que los recorro
  48.                             if(strpos( $key,'.'.$ext ) == true){//preguntamos si existe
  49.                                 $contentType=$value;//igualamos
  50.                                 break;//rompemos el bucle
  51.                             }
  52.                         }
  53.                     }
  54.                 }
  55.             }
  56.  
  57.             header("Content-type: ".$contentType);//lanzamos los headers
  58.             readfile($path);//abrimos el archivo
  59.         }else{// si no existe el archivo
  60.  
  61.             header("HTTP/1.0 404 Not Found");//lanzamos error 404
  62.             header("Status: 404 Not Found");
  63.         }
  64.     }


y dejo el enlace de descarga para el archivo "aux/mimeType.aux.php"

https://mega.co.nz/#!AMZynTwC!SomS2nKnE8uBdPSz1pTUqx6JwMa6gxeDYg6yJIa lu3c
  #5 (permalink)  
Antiguo 28/01/2014, 17:24
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: lanzar direccion real

Me alegro que lo solucionaras. con respecto a los mimes te dejo un aporte completo que hice hace tiempo: http://www.forosdelweb.com/f18/aport...-mime-1017467/ Alli hay una funcion con todos los mimes existentes y un link a la fuente de estos.

saludos
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: .htaccess, url-amigables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:37.