asp.net 301重定向大数据

时间:2017-02-01 12:25:47

标签: c# asp.net asp.net-mvc web-config

我已经更改了我的网站数据库,并且我已经更改了超过10000个网址,我需要进行301重定向,处理301重定向的大量数据的最佳方法是什么?

我无法通过使用web.config来实现,文件将变得非常大,并且需要花费很多精力

<httpRedirect enabled="true" exactDestination="true" httpResponseStatus="Permanent">
     <add wildcard="/MyOldAspFile.aspx" destination="/MyNewFile.aspx" />
     <add wildcard="/MyOldHtmlFile.html" destination="/MyNewFile.aspx" />
</httpRedirect>

那么,处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

我想建议为此目的使用重写映射。并将重写映射存储在另一个文件中。在你的web.config中它将是:

<rewrite>
  <rewriteMaps configSource="rewriteMaps.config"/>
  <rules configSource="rewriteRules.config"/>
</rewrite>

在rewriteRules.config中;

<rules>
   <rule name="Rule for Redirects">
      <match url=".*" />
      <conditions>
         <add input="{Redirects:{REQUEST_URI}}" pattern="(.+)" />
      </conditions>
      <action type="Redirect" url="{C:1}" appendQueryString="false" />
   </rule>
</rules>

在rewriteMaps.config中:

<rewriteMaps>
    <rewriteMap name="Redirects">
        <add key="/old1" value="/new1" />
        <add key="/old2" value="/new2" />
     </rewriteMap>
</rewriteMaps>

应在IIS中安装URL重写模块

如果你有带旧网址的数据库,你可以通过编程方式填写rewriteMaps。简单逻辑的样本在这里:

var urls = new Dictionary<string, string>();
urls.Add("/old", "/new");

var lines = new List<string>();

lines.Add("<rewriteMaps>");
lines.Add("<rewriteMap name=\"Redirects\">");

foreach (var url in urls)
{
    lines.Add(string.Format("<add key=\"{0}\" value=\"{1}\" />", url.Key, url.Value));
}

lines.Add("</rewriteMap>");
lines.Add("</rewriteMaps>");

System.IO.File.WriteAllLines(@"rewriteMaps.config", lines);