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]