powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / mod_rewrite? редирект старых ссылок на новые
2 сообщений из 2, страница 1 из 1
mod_rewrite? редирект старых ссылок на новые
    #37959033
mangustastu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Подскажите пожалуйста как корректно реализовать следуйщую задачу.

Был старый сайт с видом ссылок
http://www.mysite.com /ru/content/blogcategory/ 166/268/

где выделенным - уникальный паттерн

сейчас сайт переехал на новый CMS

и ссылки имеюют совершенно другой формат. количество материалов(линков) не больше 250.

к примеру
http://www.mysite.com/zdorove/chelovek-zdorovyj-kto-on

или другими словами у меня есть массив или база вида
old_url ---> new_url

Задача состоит в том, что бы в случае запроса с линком содержащим старый паттерн (/ru/content/blogcategory/)

запустить скрипт который найдет соответствие старой линке - новую (из базы или из массива)

перенаправит.

В регулярных выражениях полный ноль. Нашел пример вот такого скрипта. Подскажите как RewriteRule изменить для вызова под мои нужды... сам скрипт уже вроде как понятно починять.

или возможно как нибуть более изящно сделать (типа RewriteMap ? http://httpd.apache.org/docs/current/rewrite/rewritemap.html)

Вообщем посоветуйте, пожалуйста.


Пример скрипта... взят отсюда http://hostline.ru/ispolzovanie-htaccess.html



Массовый редирект новых файлов.
Тепепь перейдем к самому сложному моменту, когда вам надо редиректить массу URL-ов, например после смены вашей CMS. Тут сразу возникает ряд проблем. Во-первых, внесение всех изменившихся адресов в .htaccess файл займет очень много времени, да и само по себе занятие малоприятное. Во-вторых, слишком много записей в .htaccess файле будут тормозить Apache сервера. И в третьих, при внесении такого количества информации высока вероятность, что вы где то ошибетесь. По этому, самый лучший выход, это нанять програмиста который вам напишет динамический редирект.
Нижеприведенный пример написан на PHP, но так же может быть выполнен на любом языке. Предположим вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый id должны быть средирекчены. Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа. old_id INT new_url VARCHAR (255) Далее пишем код который свяжет ваши старые id с новыми URL-ами
После этого, добавляем следующую строчку в .htaccess:


RewriteRule ^/product-(.*)_([0-9]+).php /redirectold.php?productid=$2


затем создаем PHP файл redirectold.php, который будет поддерживать 301 редирект:

<?php
function getRedirectUrl($productid) {
// Connect to the database
$dServer = "localhost";
$dDb = "mydbname";
$dUser = "mydb_user";
$dPass = "password";

$s = @mysql_connect($dServer, $dUser, $dPass)
or die("Couldn't connect to database server");

@mysql_select_db($dDb, $s)
or die("Couldn't connect to database");

$query = "SELECT new_url FROM redirects WHERE old_id = ". $productid;
mysql_query($query);
$result = mysql_query($query);
$hasRecords = mysql_num_rows($result) == 0 ? false : true;
if (!$hasRecords) {
$ret = 'http://www.yoursite.com/';
} else {
while($row = mysql_fetch_array($result))
{
$ret = 'http://www.yoursite.com/'. $row["new_url"];
}
}
mysql_close($s);
return $ret;
}

$productid = $_GET["productid"];
$url = getRedirectUrl($productid);

header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
exit();
?>
...
Рейтинг: 0 / 0
mod_rewrite? редирект старых ссылок на новые
    #37959059
mangustastu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот так RewriteMap пытаюсь делать


RewriteMap old2new txt:/etc/apache2/mapold2new.txt
RewriteRule ^ru/content(.*) /${old2new:$1|NOTFOUND} [PT]



file mapold2new.txt выглядит так....

##
## mapold2new.txt -- массив преобразований
##

ru/content/blogcategory/166/268/ zdorove/chelovek-zdorovyj-kto-on # человек здоровый кто он
ru/content/blogcategory/166 zdorove/ # категория здоровье
...


1) вопрос по поводу использования слеша перед ru/content в регулярном выражении... и на до ли потом в тестовом файле слеш?
2) RewriteRule ^ru/content(.*) /${old2new:$1} [PT] - такой вариант откроет просто корень сайта ?
3) что значит [PT] ?
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / mod_rewrite? редирект старых ссылок на новые
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]