C# 在大量HTML文件中重写动态URL
我正在进行一个从传统内部网到新产品的迁移项目 所有的html文件都存储在一个文件系统中,但会被放入一个数据库,我已经清理了很多html,现在我需要做的是重写URL,以便它们继续工作 目前,我们有数千个带有查询字符串链接的文件,如下所示:C# 在大量HTML文件中重写动态URL,c#,replace,C#,Replace,我正在进行一个从传统内部网到新产品的迁移项目 所有的html文件都存储在一个文件系统中,但会被放入一个数据库,我已经清理了很多html,现在我需要做的是重写URL,以便它们继续工作 目前,我们有数千个带有查询字符串链接的文件,如下所示: <a href="site.get?section&PAGE277">Hanoi</a> <a href="site.get?section&PAGE278">Ho Chi Minh City</a>
<a href="site.get?section&PAGE277">Hanoi</a>
<a href="site.get?section&PAGE278">Ho Chi Minh City</a>
<a href="site.get?section&PAGE245">Hong Kong</a>
我需要一些东西来改变所有链接,使其看起来像:
<a href="/sites/pages/PAGE277.aspx">Hanoi</a>
<a href="/sites/pages/PAGE278.aspx">Ho Chi Minh City</a>
<a href="/sites/pages/PAGE245.aspx">Hong Kong</a>
该数字将始终为三位数
我已经在HTML中做了很多其他的转换,但是在这个转换上遇到了困难
有什么想法吗
提前谢谢
编辑:页面将迁移到SharePoint,因此将存储在SharePoint内容数据库中供内部使用
编辑2:
这解决了问题,但能做得更整洁吗
public static string ReplacePageUrl(string content)
{
string updatedContent = content;
for (int i = 1; i < 1000; i++)
{
updatedContent = updatedContent.Replace("site.get?section&PAGE" + i.ToString("D3"),
"href=\"/sites/pages/page" + i.ToString("D3") + ".aspx");
}
return updatedContent;
}
publicstaticstringreplacepageurl(字符串内容)
{
字符串updatedContent=内容;
对于(int i=1;i<1000;i++)
{
updatedContent=updatedContent.Replace(“site.get?节和页”+i.ToString(“D3”),
“href=\”/sites/pages/page“+i.ToString(“D3”)+”.aspx”);
}
返回更新的内容;
}
修改数据库并保留数据库的单个实例是非常危险的,而且可能容易出错,如果您正在修改URL,请尝试以下场景:
执行301重定向:
永久移动的HTTP响应状态代码301用于
永久重定向,表示使用URL的当前链接或记录
接收到的301永久移动响应应为
更新到响应位置字段中提供的新URL。-Wikipedia
通过这样做,你不会失去你在当前页面上的排名,也不会影响SEO
创建新内容或将其复制到另一个数据库
一旦您有了url列表,您将重定向,您可以在此数据库(新的url结构)上执行url更改,然后您可以分析和研究重定向,并在没有断开链接的情况下对此数据库进行所有必要的修改
测试重定向
- 我建议您在产品投入生产之前测试重定向(这听起来很明显,不是吗),但请确保您正在修改本地ETC文件系统,以将应用程序的域指向127.0.0.1 ip
- 在google上运行几个测试,将您正在测试的url模式写入google查询,如“page1.aspx?param=1”站点:yourdomain.com,然后尝试每个模式/重定向,以确保一切正常
var links = html.DocumentNode
.Descendants("tr")
.Where(tr => tr.GetAttributeValue("class", "").Contains("alt"))
.SelectMany(tr => tr.Descendants("a"))
.ToArray();
我建议用记事本++()替换文件中的文本
然后,您可以将“在文件中替换”函数与正则表达式一起使用
在“查找/替换”框中启用正则表达式后,替换此:
<a href="site\.get\?section&(.*)">(.*)</a>
为此:
<a href="/sites/pages/\1\.aspx">\2</a>
是否要替换html文件中的文本?是的,我正在使用StreamReader将html读入字符串,然后我从中创建一个SharePoint.aspx页面,但需要删除JavaScripts等。这不是一个问题。感谢详细回答,这是一个内部网,尽管SEO并不重要,所有页面都将创建为SharePoint页面,因此驻留在SharePoint内容数据库中我已经更新了我的答案,也许它可以帮助您完成未来的工作!