2012-09-13 32 views
17

Me gustaría entender la diferencia entre redireccionar y reescribir una URL utilizando .htaccess. Así que aquí está un ejemplo: Digamos que tiene un enlace como www.abc.com/ index.php?page=product_types&cat=88 (llamar a esto la url "original")Comprender la diferencia entre redireccionar y reescribir .htaccess

Pero cuando el usuario escribe en abc.com/shoes (vamos a llamar a esta la url "deseado"), que necesitan para ver el contenido del enlace de arriba. Para lograr esto, me gustaría hacer esto:

Options +FollowSymLinks 
RewriteEngine on 
RewriteBase/
RewriteRule ^(.*)shoes(.*)$ index.php?page=product_types&cat=88 

No hay nada malo con este código y lo hace el truco. Sin embargo, si escribo la URL original en la barra de direcciones, aparece el contenido, pero la URL no cambia. Por lo que se mantiene como www.abc.com/index.php?page=product_types&cat=88

Pero lo que si quería la URL deseada (/shoes) para aparecer en la barra de direcciones, si he escrito en www.abc.com/ index.php?page=product_types&cat=88? ¿Cómo se lograría esto con .htaccess? ¿Estoy corriendo en un bucle potencial?

+2

Sí, haría esto en PHP. El .htaccess podría funcionar en teoría, pero si hace esto muchas veces será cada vez más difícil administrar el orden de los redireccionamientos para evitar un bucle. Sé que duele, pero valdría la pena el tiempo para construir su enrutamiento de solicitud para admitir URL bonitas desde dentro de la aplicación. –

+0

Creo que lo entiendo @JoeMills.Desde el punto de vista de un SEO, me pregunto si existe algún peligro al redirigir la URL original deseada desde la aplicación. – Ray

Respuesta

25

Parte de la explicación se puede encontrar aquí: https://stackoverflow.com/a/11711948/851273

Lo esencial es que una reescritura ocurre únicamente en el servidor, el cliente (navegador) es ciego a ella. El navegador envía una solicitud y obtiene el contenido, no es más prudente con lo que sucedió en el servidor para atender la solicitud.

Una redirección es un servidor respuesta a una solicitud que indica al cliente (navegador) que envíe una nueva solicitud. El navegador solicita una url, esta url es la que está en la barra de direcciones, el servidor recibe esa solicitud y responde con un redireccionamiento, el navegador obtiene la respuesta y carga la URL en la respuesta del servidor. La URL en la barra de direcciones ahora es la nueva URL y el navegador envía una solicitud para la nueva URL.

Simplemente reescribiendo internamente en el servidor no hace absolutamente nada a las URL en la naturaleza. Si google o reddit o cualquier sitio tiene un enlace a www.abc.com/index.php?page=product_types&cat=88, la regla de reescritura interna del servidor no hace absolutamente nada, ni a nadie que haga clic en ese enlace, ni a ningún cliente que solicite esa URL por ningún motivo. Toda la regla de reescritura hace es cambiar internamente algo que contiene shoes a /index.php?page=product_types&cat=88 dentro del servidor.

Si desea hacerlo, se realiza una solicitud para la página index.php con todas las cadenas de consulta, puede indicar al cliente (navegador) redirigir a la URL más atractiva. Debe tener cuidado porque las reglas de reescriben el bucle y su redirección se reescribirá internamente, lo que causará una redirección que se reescribirá internamente, etc. causando un bucle y arrojando un error de 500 servidores. Para que pueda coincidir específicamente a la propia solicitud:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?page=product_types&cat=88 
RewriteRule ^/?index.php$ /shoes [L,R=301] 

Esto sólo se debe utilizar para que así sea eslabones de la naturaleza ponen en punta al lugar correcto. Debe asegurarse de que su contenido genere los enlaces correctos. Eso significa que todo en su sitio está utilizando el enlace /shoes en lugar del enlace /index.php?page=product_types&cat=88.

+0

¡Perfecto! ¡Exactamente lo que estoy buscando! Gracias, @Jon – Ray

+0

No vi la otra respuesta que vinculaste porque solo estaba buscando respuestas aceptadas dentro de la etiqueta .htaccess – Ray

Cuestiones relacionadas