Как сохранить ссылки при переходе с одной CMS на другую - PullRequest
0 голосов
/ 29 декабря 2011

Справочная информация: Мы переносим веб-сайт, размещенный на пользовательской CMS на основе точечной сети, в Wordpress.

Проблема: Содержимое в различных сообщениях содержит ссылки на другое содержимое в CMS. Эти ссылки были введены вручную и содержат весь URL, начиная с http. Хотя мы переместили все содержимое публикации в Wordpress с помощью сценария php, ссылки внутри содержимого по-прежнему указывают на старые ссылки. Поскольку структура URL изменилась, похоже, нет программного способа замены ссылок.

Пример старого URL: http://www.example.com/doing-this-and-that-1234.aspx

Пример нового URL: http://www.example.com/categoryname/doing-this-and-that/

Запрос: Мне нужны идеи о том, как мы можем справиться с этим без необходимости изменять все ссылки вручную.

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

Ответы [ 3 ]

1 голос
/ 29 декабря 2011

Сейчас я делаю что-то похожее, перевожу огромный статический магазин html для запуска на django (это больно и кроваво).

Наше решение не является чем-то особенно элегантным. Во время миграции каждой страницы мы отмечаем старый URL, затем новый URL и добавляем их в базу данных перенаправления. После того, как мы перенесли весь наш контент в новую структуру backend и url, мы запускаем скрипт, который идентифицирует все ссылки в документе с помощью этих селекторов xpath:

 //a/@href
 //img/@src

Затем мы извлекаем перенаправления из нашей таблицы перенаправлений и заменяем ссылки приведенными ниже регулярными выражениями.

#escape special characters to avoid problems with the regex
link = link.replace('#', r'\#')
link = link.replace('.', r'\.')
link = link.replace('/', r'\/')
link = link.replace(':', r'\:')

#compile a regex, using the source link, and replace all existing links
repl_regex = r'href\s{0,}\=[\s\"\']{0,}(%s)[\s\"\']{0,}'%link
markup = re.sub(repl_regex, 'href="%s"'%dst_url, markup)

#repeat for images
repl_regex = r'src\s{0,}\=[\s\"\']{0,}(%s)[\s\"\']{0,}'%link
markup = re.sub(repl_regex, 'src="%s"'%dst_url, markup)

#Let me know if you have any questions, the above is written in python
#and it sounds like you're using php and a .net language.

Теперь, хотя этот метод, вероятно, требует больше усилий, чем вы хотели бы, и потребует немного больше предварительной подготовки, он имеет два преимущества:

1) Сравнив каждую ссылку в документе с таблицей перенаправления, вы сможете легче идентифицировать отсутствующие страницы / отсутствующие перенаправления

2) SEO. Вместо того, чтобы гуглбот пересматривал весь ваш сайт, просто предоставьте 301 переадресацию на вашу таблицу перенаправлений

Дайте мне знать, если у вас есть какие-либо вопросы.

1 голос
/ 29 декабря 2011

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

Если вы не хотите писать скрипт, вы можете использовать текстовый редактор, например notepad ++ или vim / gvim. В notepad ++ вы использовали бы замену с 'режимом поиска' как 'регулярное выражение', а с vim вы бы использовали флаг подтверждения команды замещения (:% s / foo / bar / gc).

0 голосов
/ 29 декабря 2011

Если вы можете сделать сопоставление между числом в URL-адресе и именем категории, то это возможно. Вы ищете и заменяете все файлы регулярным выражением, чтобы найти URL-адреса вида http://www.example.com/doing-this-and-that-1234.aspx, и заменяете их новым URL-адресом.

Regex:

(http://www\.example\.com/.*?)-(\d+)\.aspx
...