Pregunta

El Escenario
He reescrito por completo un viejo sitio de comercio electrónico ASP clásico existente a lo largo de PHP.

El diseño de la base de datos del sitio anterior tenía un montón de problemas que causan ID relacional que une problemático de filas de datos de productos a otras tablas en la base de datos.

Para evitar esto yo también rediseñó la base de datos, dando nuevos productos claves principales, mientras que todavía mantiene una columna en la tabla con los productos de edad PK.

El problema
El problema que tengo es cuando el sitio se relanza, necesito todos los enlaces del motor de búsqueda que se usa para apuntar a 'Product.asp? ProductID = 29' para buscar la base de datos, haga coincidir los productos viejo, PK y redirigir a los nuevos productos de PK es decir, 'products.php? ID = 53'.

Estoy buscando hacer esto con Mod_rewrite / RewriteMap, sin embargo, toda la documentación que puedo encontrar en línea no indica cómo hacer frente a la consulta de base de datos de secuencia de comandos PK.

Actualizar
He leído hasta más adelante sugerencia Ignacio Vazquez-Abrams en http: Programa de reescritura //httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritemap > externo, y parece ser correcta y la solución ideal.
Sin embargo, después de contactar con mi anfitrión, que no permiten ReWriteMap en sus servidores.

He suministra la mía, pero de ninguna manera la solución mejor / correcta de lograr esto sin ReWriteMap habilitado.

¿Fue útil?

Solución 3

Después de descubrir RewriteMap está deshabilitado de mi anfitrión, he llegado a mi propia solución simple uso de mod_rewrite y 2x 301 redirecciones.

.htaccess

RewriteEngine on
RewriteRule ^Product(.*)\.asp SEO_Redirect.php [NC,R=301]

archivo SEO_Redirect.php

$ID = $_GET['ID'];

$query_rsNewID = "SELECT NewProductID FROM Products WHERE OldProductID = '$ID'";
$rsNewID = mysql_query($query_rsNewID, $Database);
$row_rsNewID = mysql_fetch_assoc($rsNewID);

header ('HTTP/1.1 301 Moved Permanently');
header ('Location: Product.php?ID='.$row_rsNewID['NewProductID']);

Tenga en cuenta, este es un extracto simplificado de cada archivo, y no sería seguro contra la inyección de SQL.

Esperamos que Google y por igual aceptará conseguir 2x 301 redirecciones sin problemas.

Otros consejos

Su consulta:

SELECT
  ID
FROM
  thetable
WHERE
  ProductID=?

A partir de ahí simplemente eco del valor de ID y una nueva línea, y la salida estándar de color.

reglas de reescritura:

RewriteMap dbfixup prg:dbfixup.script
RewriteCond %{QUERY_STRING} ProductID=(\d+)
RewriteRule Product.asp Products.php?ID=${dbfixup:%1}

Se debe tener un nombre de variable obtener diferentes para el nuevo ID. De esa manera en su nuevo programa va a saber si coincide con el producto utilizando el identificador antiguo o el nuevo.

$old = isset($_GET['id']) && is_numeric($_GET['id']) && $_GET['id'] > 0 ? $_GET['id'] : 0;
$new = isset($_GET['new']) && is_numeric($_GET['new']) && $_GET['new'] > 0 ? $_GET['new'] : 0;
if ($old + $new > 0) {
    $query = 'SELECT * FROM `ProductDetails` WHERE '.($old > 0 ? '`OrigPrdID`='.$old : '`PrdDetID`='.$new).' LIMIT 1;';
    ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top