|
|
|
mod_rewrite? редирект старых ссылок на новые
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите пожалуйста как корректно реализовать следуйщую задачу. Был старый сайт с видом ссылок 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(); ?> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2012, 23:42:28 |
|
||
|
mod_rewrite? редирект старых ссылок на новые
|
|||
|---|---|---|---|
|
#18+
вот так 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] ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2012, 01:27:04 |
|
||
|
|

start [/forum/topic.php?fid=23&fpage=134&tid=1464701]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
| others: | 205ms |
| total: | 362ms |

| 0 / 0 |
