Foros del Web » Programando para Internet » PHP »

Cambiar el formato de la url al enviar varibles

Estas en el tema de Cambiar el formato de la url al enviar varibles en el foro de PHP en Foros del Web. Cambiar el formato de la url al enviar varibles Si queremos que al enviar varibles en la URL el formato deje de ser http://www.algo.com/index.php?postal=humor y ...
  #1 (permalink)  
Antiguo 07/06/2005, 17:52
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 14 años, 4 meses
Puntos: 21
Pregunta Cambiar el formato de la url al enviar varibles

Cambiar el formato de la url al enviar varibles

Si queremos que al enviar varibles en la URL el formato deje de ser http://www.algo.com/index.php?postal=humor y pase a ser http://www.algo.com/index.php/postal/humor para que parezca un directorio, has de poner el siguinete código.


<?php
$HTTP_TEMP_PATH_VARS = explode("/",$PATH_INFO);
array_shift($HTTP_TEMP_PATH_VARS);
reset($HTTP_TEMP_PATH_VARS);
$HTTP_PATH_VARS = array();
while( list($index,$key) = each($HTTP_TEMP_PATH_VARS) ) {
list($index,$val) = each($HTTP_TEMP_PATH_VARS);
$val = urldecode($val);
$HTTP_PATH_VARS[$key] = $val;
$$key = $val;
}
?>


puede alguien explicarme si esto es verdad ya lo probe pero no se si lo estoy aplicando bien, donde debo poner este codigo??
__________________
gerardo
  #2 (permalink)  
Antiguo 07/06/2005, 19:37
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 14 años, 7 meses
Puntos: 9
Yo lo hago con un archivo .htaccess
Entiendo que hay quien opina que no se debe usar, pero no me queda muy claro porqué. Como sea lo uso, funciona, mi proveedor de hospedaje no tiene conflicto con eso y jala retelindo.

Entiendo que funciona bien para Apache e ignoro si haya algo similar para IIS

Lo que escribas en el archivo .htaccess dependerá de la configuración de tu servidor, pero en mi caso, que está bastante "estandar", la regla que hice y que funciona va más o menos así:
Código:
Options FollowSymLinks
Options SymLinksIfOwnerMatch
RewriteEngine on
RewriteRule (.+)_(.+).php /index.php?param1=$1&param2=$2
Las dos primeras líneas Options... sirven para decirle a Apache cómo va a tratar las reglas de reescritura.
La linea RewriteEngine on sirve para activar esta característica. Averigua con tu proveedor dehosting si esas tres primeras líneas quedarían así o debes poner otra cosa.
Finalmente está la línea RewriteRule que es la que hace todo el trabajo con expresiones regulares.

Básicamente el (.+)_(.+).php se traduce en hechos como dominio.com/param1_param2.php lo cual es maravilloso. Los (.+) son las posiciones que ocupará cada variable. El .+ significa que puedes escribir ahí lo que te de la gana (casi).
El /index.php?param1=$1&param2=$2 es el formato al que debe traducir la dirección para pasársela así al PHP y éste entonces recoja las variables $_GET sin problema.
Si te fijas, están los $1 y $2 en donde deberían estar los valores de los parámetros de url. Lo que esté entre el primer paréntesis (.+) lo pondrá como el valor de param1 sustituyendo $1 y lo mismo con el segundo.
Así es como funciona.

Sirve para lo mismo que el code que posteaste, pero se resuelve de otra forma. Espero que te sea de utilidad.

Saludos
  #3 (permalink)  
Antiguo 07/06/2005, 19:40
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 14 años, 7 meses
Puntos: 9
Otra cosa importante:

Fíjate que uso (.+)_(.+).php en vez de (.+)/(.+)
La razón es que del segundo modo (que aparentemente es como quieres que quede) las referencias relativas se pierden porque "cree" que la página está en otro directorio. No pasa nada si haces todas tus referencias así: /index.htm ó /imgs/foto1.jpg en vez de index.htm ó img/foto1.jpg (la diferencia es la / antepuesta)

Luego entonces, en vez de quedarte: algo.com/index.php/postales/humor te quedaría algo.com/postales_humor.php

Incluso es más amigable para los buscadores, ya que se rumora que indexan más rápido lo que está en raíz que lo que está en subdirectorios (aunque estos sean "fake")

De hecho, la regla en tu caso sería algo así:
Código:
Options FollowSymLinks
Options SymLinksIfOwnerMatch
RewriteEngine on
RewriteRule (.+).php /index.php?postal=$1
El resultado sería este: algo.com/humor.php (que se convierte en index.php?postal=humor).
Es cuestión de gustos, pero a mí me funciona mejor de esta forma.

Saludos

Última edición por Escoffie; 07/06/2005 a las 19:45
  #4 (permalink)  
Antiguo 07/06/2005, 20:09
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 14 años, 4 meses
Puntos: 21
Orale

Si que me diste otra vision del este detalle pero tienes razon en lo que comentan sobre .htacces no digo que sea mala la idea , hasta ahora no lo he usado y pues tratare de buscar una solucion de cualquier modo si lo encuestro lo posteare inmediatamente pero gracias por contestar.
__________________
gerardo
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 18:21.