usar trucos significa rewriterule rewritecond regulares reglas reescribir redirigir redireccionar redireccionamiento redireccion que permanently moved modificar modelo mod_rewrite mediante htaccess expresiones error ejemplos configurar con como apache .htaccess redirect seo get

apache - trucos - rewriterule htaccess



Apache Redirect 301 falla cuando se usan parĂ¡metros GET, como? Blah= (3)

He creado un nuevo sitio de PHP para un cliente y quiero redirigir los resultados de Google de la estructura anterior del sitio a la nueva.

He puesto varias docenas de Redirect 301''s en un .htaccess en el registro de documentos, y mientras algunos funcionan bien, estoy teniendo problemas con muchos otros.

Esto funciona bien:

Redirect 301 /nl/flash/banner_new.swf http://www.example.com/actueel/nieuws.html?action=show&f_id=152

¡Esto no funciona! (lo que lleva a un 404 ya que la redirección simplemente se omite):

Redirect 301 /nl/index.php?mID=24511&subID=0 http://www.example.com/solutions/printsolutions.html Redirect 301 /nl/index.php?mID=24512&subID=0 http://www.example.com/support/koppeling-met-omgeving.html

Las redirecciones se mezclan en el archivo .htaccess y solo las redirecciones con parámetros GET parecen fallar.

¿Hay una solución? Ignorar las redirecciones fallidas no es una opción para el cliente. Gracias por tus pensamientos.


De acuerdo con las respuestas de Gumbo y Martijn ... pero:

Typo en Martijn, debería haber "^" para iniciar la expresión regular para la condición REQUEST_URI:

RewriteCond %{REQUEST_URI} ^/nl/index.php$

Yo también pude hacer que Martijn, no Gumbo, trabajen donde estaba mi archivo .htaccess.

Además, si no desea que se pase la cadena de parámetros con la reescritura, debe agregar un "?" Al final de la URL:

RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html? [L,R=301]

De lo contrario, siguiendo el código de Martijn, se lee "si su URL es /nl/index.php?mID=24511&subID=0, luego redirija a http://www.example.com/solutions/printsolutions.html?mID=24511&subID=0 with un encabezado de redireccionamiento permanente 301 y no procesar más reglas en esta URL "

Esto puede o no ser lo que desea, y para ser justos como regla general, si no se entienden los parámetros, simplemente se ignorarán sin causar ningún daño, por lo que probablemente no importe. Sin embargo, si desea redirigir a un humano a una nueva página y desea "URL bonitas", es preferible eliminar la cadena de parámetros, así que pegue el "?" Al final de la URL de destino.


Si bien el razonamiento de Gumbo fue correcto, no pude hacer funcionar su RewriteRule.

Añadiendo otro RewriteCond lo hice. Lo siguiente fue probado y funciona bien.

RewriteCond %{REQUEST_URI} /nl/index.php$ RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$ RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html [L,R=301]


Redirect solo funciona en las rutas de URL:

La ruta URL anterior es una ruta que distingue entre mayúsculas y minúsculas (% decodificada) que comienza con una barra diagonal. […]

Por lo tanto, la consulta de URL (la parte después de la primera ? Hasta el primer # después) no está marcada.

Pero puedes usar mod_rewrite para hacer eso:

RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$ RewriteRule ^nl/index/.php$ http://www.example.com/solutions/printsolutions.html [L,R=301] RewriteCond %{QUERY_STRING} ^mID=24512&subID=0$ RewriteRule ^nl/index/.php$ http://www.example.com/support/koppeling-met-omgeving.html [L,R=301]