Redirigir a una URL reescrita
-
22-10-2019 - |
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
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)