Pregunta

Ok, estoy reescribiendo algunas URL de página para un carrito de PHP personalizado.

Tengo las siguientes reglas:

RewriteRule ^category/([0-9]+)/([a-z-]+)$ /store.php?cat=$1 [L]
RewriteRule ^product/([0-9]+)/([a-z-]+)$ /product.php?id=$1 [L]

Estos me permitirán usar una estructura de URL como Ejemplo.com/product/23/product-slug.

Esa parte está funcionando bien. Me pregunto qué opciones tengo para la otra dirección; Redireccionando las solicitudes de la URL antigua a la nueva URL. Entonces, por ejemplo, cuando alguien va a /product.php?id=2 quiero redirigir a /productos /2 /slug.

¿Alguna idea de cómo hacer esto?

Probé una redirección simple, pero no funcionaría:

Redirect 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug
¿Fue útil?

Solución 2

Resolví esto de una manera diferente: con una modificación al archivo store.php.

Miré la producción de print_r($_SERVER) Después de hacer ping las URL normales y reescritas. encontre eso $_SERVER['SCRIPT_URL'] Contiene "/store.php" cuando se golpea la URL normal y contiene mi camino reescrito cuando se golpea la URL reescritura.

Esto significa que puedo hacer una prueba simple y redirigir adecuadamente:

if ($_SERVER['SCRIPT_URL'] == "/store.php") {
    // run some code that will generate the url
    $rewrittenURL = generateURL();
    // then add:
    header("HTTP/1.0 301 Moved Permanently"); // tell spiders this is permanent
    header("Location: $rewrittenURL");
}

Otros consejos

Redireccionar solo toma un prefijo de URL, no un Regex (por ejemplo, store.php o /store)

Necesitas probar redirectMatch:

RedirectMatch 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug

Además, ¿se supone que debe comenzar con A /? No estoy seguro (sus entradas de rewriterule arriba comienzan sin barras, por ejemplo)

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