Может ли mod_rewrite делать математику? - PullRequest
4 голосов
/ 17 июня 2010

Я планирую преобразовать свой веб-сайт в новую CMS, но я хотел бы использовать mod_rewrite для плавного перенаправления старых ссылок на их новые местоположения.

Загвоздка в том, что мой новый блог не будет иметь те же номера статей, что и старые, потому что я импортирую некоторые старые записи в их первой. Таким образом, мой mod_rewrite должен будет взять URL-адрес, такой как old.php?article=125, сделать дополнение, чтобы выяснить новый номер статьи (скажем, +200, для этого примера), и перенаправить на new.php?i=325.

Может ли mod_rewrite выполнить добавление самостоятельно или мне понадобится какой-нибудь вспомогательный скрипт для этого?

Ответы [ 4 ]

3 голосов
/ 17 июня 2010

Мод перезаписи может делать регулярные выражения.Если вы можете определить, что значение ваших новых статей будет таким же идентификатором плюс 1000, что вы можете сделать:

rewriteRule /article=(\d{1})$ /new.php?i=100$1
rewriteRule /article=(\d{2})$ /new.php?i=10$1
rewriteRule /article=(\d{3})$ /new.php?i=1$1
2 голосов
/ 17 июня 2010

Один из вариантов - полностью забыть о старых ссылках в файле .htaccess.Вместо этого создайте пользовательскую страницу ошибки 404 Not Found и настройте Apache для обслуживания ее по неработающим ссылкам.Эта страница будет PHP-скриптом, и она будет проверять переменную $_SERVER['REQUEST_URI'] с простым выражением:

<?php

if( substr($_SERVER['REQUEST_URI'], 0, 7)=='old.php' ){
    // Old link found!
}

?>

Внутри условия "найдена старая ссылка" вы можете выполнить дальнейшую обработку:

  1. Запустите регулярное выражение, чтобы найти идентификатор статьи
  2. Сделайте на нем математические вычисления и попробуйте сопоставить его с новым идентификатором
  3. Выполните перенаправление с помощью header ()
2 голосов
/ 17 июня 2010

Это не может сделать математику. Может быть, вы хотите использовать карту перезаписи .

0 голосов
/ 17 июня 2010

Я полагаю, что это продвигает "магию вудо", которая mod_rewrite.Я бы либо разработал вспомогательный скрипт, чтобы следовать этому, либо фактически перенести на уровне базы данных старые записи.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...