【问题标题】:How to maintain links when migrating from one CMS to another从一个 CMS 迁移到另一个 CMS 时如何维护链接
【发布时间】:2012-01-29 17:04:43
【问题描述】:

背景:我们正在将托管在基于点网的自定义 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/

请求:我需要有关如何在无需手动更改所有链接的情况下处理此问题的想法。

提前致谢。

【问题讨论】:

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


    【解决方案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) 搜索引擎优化。无需让 googlebot 重新抓取您的整个网站,只需针对您的重定向表提供 301 重定向

    如果您有任何问题,请告诉我。

    【讨论】:

    • 感谢您的详细回答。当然看起来也适合我们。如果需要,会 ping 你。再次感谢。
    【解决方案2】:

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

    如果您不想编写脚本,您也可以使用notepad++ 或vim/gvim 等文本编辑器。在记事本++中,您将使用“搜索模式”作为“正则表达式”的替换,而在 vim 中,您将使用替换命令的确认标志 (:%s/foo/bar/gc)。

    【讨论】:

      【解决方案3】:

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

      正则表达式:

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

      【讨论】:

      • 这个数字是随机的,所以很遗憾这不起作用。谢谢你的建议
      • 你是怎么知道分类名称的?
      • 我们对内容进行了分类。它与早期的 URL 结构无关
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 2016-01-16
      相关资源
      最近更新 更多