从一个CMS迁移到另一个CMS时如何维护链接

时间:2011-12-29 07:37:02

标签: regex wordpress content-management-system migration hyperlink

背景:我们正在将基于网络的自定义CMS托管的网站迁移到Wordpress。

问题:各个帖子中的内容包含指向CMS中其他内容的链接。这些链接已手动放入并包含从http开始的整个URL。虽然我们已经使用php脚本将所有帖子内容移动到Wordpress,但内容中的链接仍然指向旧链接。由于URL结构已更改,似乎没有以编程方式替换链接。

旧网址示例:http://www.example.com/doing-this-and-that-1234.aspx

新网址示例:http://www.example.com/categoryname/doing-this-and-that/

请求:我需要有关如何处理此问题的建议,而无需手动更改所有链接。

提前致谢。

3 个答案:

答案 0 :(得分:1)

我想不出一个非常好的方法,但这是一个想法。您可以运行命令行脚本来遍历所有页面,然后遍历所有链接并向用户显示原始链接和“建议”链接。建议的链接可以是具有最常见类别名称的新格式,并可选择更改为任何其他类别名称。

如果您不想编写脚本,您也可以使用文本编辑器,如notepad ++或vim / gvim。在notepad ++中你可以使用'search mode'替换为'regular expression',使用vim你可以使用substitute命令的confirm标志(:%s / foo / bar / gc)。

答案 1 :(得分:1)

我正在做类似的事情,将一个巨大的静态html商店迁移到django上运行(这很痛苦和血腥)。

我们的解决方案并不是特别优雅。在每个页面的迁移过程中,我们注意到旧的URL,然后是新的URL,并将它们添加到重定向数据库。一旦我们将所有内容迁移到新的后端和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。而不是让googlebot重新抓取整个网站,只需针对您的重定向表提供301重定向

如果您有任何问题,请与我们联系。

答案 2 :(得分:0)

如果您可以在URL中的数字和类别名称之间进行映射,那么这是可行的。您使用正则表达式搜索并替换所有文件,以查找http://www.example.com/doing-this-and-that-1234.aspx格式的网址,然后将其替换为新网址。

正则表达式:

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