.htaccess и массовый редирект для ЧПУ

MiladyX
На сайте с 23.09.2008
Offline
65
832

Всем привет. Подскажите такой вопрос плз. Были урлы вида:


http://www.site.ru/news/index.php?news=45544

Сделали ЧПУ, стало так:


http://www.site.ru/news/eto-novost/

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

В другом разделе сайта были урлы:


http://www.site.ru/razdel/?ID=6726

и тоже сделали ЧПУ, по структуре, описанной выше. Тут тоже несколько тысяч урлов.

Если нельзя сделать массовый редирект, подскажите тогда хотя бы как это сделать побыстрее руками...

siv1987
На сайте с 02.04.2009
Offline
427
#1

eto-novost динамическая часть которая htaccess'у неизвестна, а значит для каждой ссылке нужно писать отдельное правило редиректа.

А в данном случае проще было бы сделать на уровне скриптов, где есть доступ к бд или к названию чпу.

MiladyX
На сайте с 23.09.2008
Offline
65
#2
siv1987:
eto-novost динамическая часть которая htaccess'у неизвестна, а значит для каждой ссылке нужно писать отдельное правило редиректа.
А в данном случае проще было бы сделать на уровне скриптов, где есть доступ к бд или к названию чпу.

Скажите, а как это будет выглядеть, если в БД ? Конечно, у каждого урла есть свой ID.

На уровне БД можно разве установить корректно 301-й редирект нормально? Или придется и скрипты подключать? header("Location: *********") ?

siv1987
На сайте с 02.04.2009
Offline
427
#3
MiladyX:
На уровне БД можно разве установить корректно 301-й редирект нормально?

Не на уровне бд, а на уровне php где есть связь с бд.

Выглядеть будет примерно следующим образом


if(preg_match('#^/news/(?:index\.php)?\?news=(\d+)#', $_SERVER['REQUEST_URI'], $out)){
$id = intval($out[1]);

//$seo_url get seo url from db

$url = '/news/'.$seo_url.'/';
header('Location: '.$url, false, 301);
exit;
}
MiladyX
На сайте с 23.09.2008
Offline
65
#4

siv1987, спасибо вам большое, помогло.

А подскажите плз по такому вопросу, мне нужно еще 2 правила редиректа настроить, попроще.

1. Со всех файлов на сайте .php редирект нужно на / т.е. если был адрес файла _site.ru/news/1.php то станет _site.ru/news/1/

2. C адресов в двух категориях (news news2) делать редирект со всех адресов которые без слеша, на конец со слешем.

Например было _site.ru/news/news станет _site.ru/news/news/

спасибо заранее.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий