Pregunta

El lanzamiento de un nuevo sitio web para un cliente nuevo.Su antiguo sitio tiene alrededor de 50 productos y, por desgracia, los viejos nombres de productos que no coinciden con el nuevo patrón de URL

Viejo Ejemplos de URL:

example.com/products.aspx?category=Foo&product=SuperLongNoBreakProductNameIDDescription

example.com/products.aspx?category=Foo&product=ProductNameDescription&var1=1293.123

example.com/products.aspx?category=Bar&product=ProductCategoryProdNameRandomNumbers

(La antigua URL a veces golpear a más de 150 caracteres).

La nueva URL es:

example.com/products/category/actual-product-name

No hay, patrón reconocible para ir desde el antiguo nombre de producto para el nuevo.No es para la categoría.

He intentado simple mod_alias Redirecciones, pero entiendo que necesito un RewriteRule en su lugar.Pero estoy teniendo problemas.Todo lo que necesito es un 1-a-1 redirect para cada uno de estos 50 de la URL.Pensé que podría hacer algo como:

RewriteRule ^/products.aspx?category=Foo&product=ProductName
    /products/category/new-product-name/  [R=301,NC]

Pero que no está funcionando.Sé que esto debe ser simple, pero estoy atascado.Alguna idea?

¿Fue útil?

Solución

Utilice el siguiente patrón para el resto de su url de redireccionamiento.Tenga en cuenta que usted escapar caracteres especiales, por ejemplo, ? , . y el espacio mediante la adición de un \ en frente de ellos

RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /products\.aspx\?category=Foo&product=SuperLongNoBreakProductNameIDDescription [NC]
RewriteRule ^ /products/category/new-product-name/  [R=301,NC]

Otros consejos

Eche un vistazo a la RewriteMap la directiva de mod_rewrite.

Usted puede especificar en un archivo de texto algo como:

products.aspx?category=Foo&product=SuperLongNoBreakProductNameIDDescription /products/category/new-product-name

Y en su httpd.conf

RewriteMap productmap /path/to/map/file.txt
RewriteRule ^(.*) ${productmap:$1} [R=301,NC]

Sugerencia:Si se trata de una redirección permanente que desea, asegúrese de establecer la adecuada Cache-Control y Expires encabezado para instruir a los navegadores caché de la 301.

Usted puede intentar algo como esto:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^category=Foo&product=ProductName$

RewriteRule ^products\.aspx$ /products/category/new-product-name/? [R=301,L]

Notas:

  1. En per-dir (.htaccess) contexto, el per-dir prefijo es despojado, por lo que no se puede iniciar el RewriteRule patrón con ^/.

  2. Usted tiene que usar RewriteCond para el partido contra la cadena de consulta.

  3. Como se dijo en otra respuesta, una RewriteMap la solución podría ser adecuado para esta situación, si usted tiene acceso a httpd.conf / el vhost definición para este sitio.No estoy seguro de cómo funciona con cadenas de consulta, aunque.

  4. Para algo como esto, que podría ser una mejor solución para volver a escribir todas estas direcciones Url a un script del lado servidor, y utilizar el script para hacer la redirección HTTP para cada URL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top