Mod_ReWrite / ReWriteMap URL, используя скрипт поиска базы данных

Сценарий
Я полностью переписал старый существующий веб-сайт ASP classic для электронной коммерции на PHP.

В конструкции базы данных предыдущего сайта было много проблем с реляционными идентификаторами, что вызывало затруднительное связывание строк данных продукта с другими таблицами в базе данных.

Чтобы обойти это, я также переработал базу данных, предоставив продукты новым Первичным ключам, сохраняя при этом столбец в таблице с продуктами старого ПК.

Проблема
Проблема в том, что когда сайт перезагружен, мне нужны все ссылки в поисковых системах, которые указывали на «Product.asp? ProductID = 29» для поиска базы данных, соответствия продукции старого ПК и перенаправления на продукты new PK т.е. «Products.php? ID = 53».

Я хочу сделать это с помощью Mod_ReWrite / ReWriteMap, однако вся документация, которую я могу найти в Интернете, не указывает, как обращаться с поиском PK базы данных.

Обновить
Я читал далее предложение Игнасио Васкеса-Абрамса по адресу http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritemap > Внешняя программа перезаписи, и это кажется правильным и идеальным решением ,
Однако после обращения к моему хосту они не активируют ReWriteMap на своих серверах.

Я поставил свои собственные, но отнюдь не лучшее / правильное решение для достижения этой цели без использования ReWriteMap .

    Ваш запрос:

     SELECT ID FROM thetable WHERE ProductID=? 

    Оттуда только эхо значение ID и новой строки, и flush stdout.

    Переписать правила:

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

    У вас должно быть другое имя переменной для нового идентификатора. Таким образом, в вашей новой программе вы узнаете, следует ли сопоставлять продукт с использованием старого идентификатора или нового.

     $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;'; ... 

    Узнав, что RewriteMap отключен моим хостом, я достиг своего собственного решения, просто используя mod_rewrite и переадресацию 2x 301.

    .htaccess файл

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

    Файл 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']); 

    Обратите внимание, что это упрощенная выдержка каждого файла и не будет защищена от SQL-инъекции.

    Надеюсь, Google и так же согласится на получение 2х 301 переадресаций без проблем.