URL Rewrite PHP sigue obteniendo el mismo $_GET['']?

Soy muy novato en esta reescritura de URL. solo tengo una pregunta en mi cabeza.

www.ejemplo.com/?page_name=inicio

El $_GET['page_name'] es en realidad el hogar

después de que la URL vuelva a escribir, la URL se convierte en

www.ejemplo.com/casa

¿Puede PHP todavía obtener el $_GET['page_name'] is 'home'?

Muchas Gracias

preguntado el 22 de mayo de 12 a las 07:05

sí ... es el mismo resultado que el anterior -

¿No debería ser al revés? quieres reescribir internamente /home a /?page_name=home. -

La pregunta es un poco vaga. ¿Qué reescritura de URL tienes? -

@Jack Quiero que www.example.com/home lea /?page_name=home que has señalado correctamente. solo uno rápido, para lograr esto, necesita usar el modo de reescritura de URL de Apache, ¿verdad? -

@ bluebill1049 así es, apache mod_rewrite hará ese tipo de cosas :) -

3 Respuestas

La reescritura de URL la realiza el servidor web, digamos en este caso Apache. Esto no es lo mismo que PHP.

Apache recibe una solicitud de URL www.example.com/home. Ahora necesita averiguar qué hacer con esta solicitud. Comprobará su configuración en busca de algo que coincida www.example.com, que lo apuntará a un Raiz del documento, es decir, alguna carpeta en el disco duro. Comprueba esa carpeta en el disco duro y encuentra un archivo .htaccess. Evalúa el archivo .htaccess, que le dice que volver a escribir la URL de /home a ?page_name=home.

Apache ahora trata de averiguar qué hacer con ?page_name=home. Dado que no se proporciona un nombre de archivo, el valor predeterminado es index.php (que ojalá exista). ahora corre eso index.php archivo en la raíz del documento, pasándolo ?page_name=home como la URL que ha recibido. PHP lo toma desde allí, ajeno a la reescritura que sucedió. Para PHP, parece que ha recibido el parámetro page_name como parámetro de consulta y lo pone en $_GET.

contestado el 22 de mayo de 12 a las 07:05

Vaya que bien explicado. Gracias - Bill

Intente usar la reescritura de esta manera (cámbielo según sus necesidades):

RewriteRule ^([A-Za-Z0-9-_]+)/?$ index.php?page_name=$1 [L]

La regla anterior redirige

http://www.domain.com/string_LiKe-this53/

en una página real existente

http://www.domain.com/index.php?page=string_LiKe-this53

en el que puede utilizar su $_GET['page'], que tendrá valor string_LiKe-this53.

contestado el 22 de mayo de 12 a las 07:05

entonces esto interrumpirá/cualquier cosa (incluye/prueba/prueba/prueba)? interrumpir a /index.php?page_name=test/test/test? - Bill

Depende de la regla de reescritura, pero sí, puede hacer que funcione según lo previsto.

La siguiente regla de reescritura:

RewriteRule /home /index.php?page_name=home

Simplemente hará que las solicitudes a /home ejecuten index.php con $_GET['page_name'] igual a "casa".

Sin embargo, dependiendo de la complejidad de su sitio, puede ser preferible usar una regla de reescritura más genérica, como:

RewriteRule ^(.+)$ index.php/$1

Luego consultaría $_SERVER['PATH_INFO'] para ver si contenía "casa". Esto funcionará bien con otros parámetros $_GET que se puedan pasar.

contestado el 22 de mayo de 12 a las 07:05

¿Qué pasa con /anything interrumpe a /index.php?page_name=anything? - Bill

Vea la respuesta de @Vishal para eso. - Jhong

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.