在 IIS 中重写映射使 web.config 太大

Rewrite Maps in IIS Make web.config Too Large

我正在迁移一个在 IIS 上 is/will 为 运行 的网站,我将使用重写映射到 301 重定向旧的“.asp” URLs 到URL 的新风格。对于成千上万的 URLs 没有模式,所以看来我必须依赖重写映射。

我的问题是默认的 web.config 大小限制是 250kb,在我的环境中,我无权更改此设置(可以在注册表级别完成 - 如果有人有权访问) .

我考虑过将 rewriteMaps 部分移动到外部文件,但外部文件也有 250kg 的默认大小限制,所以这也行不通。

我正在寻找其他方法来处理此问题...我目前的大小为 242kb,要添加的新旧重定向映射数量是原来的两倍多。

提前致谢。

Nativerd.dll 文件使用此注册表项的值来确定 Web.config 文件的最大允许大小(以 KB 为单位)。配置系统在 Windows Server 2008 中采用默认值 250 KB,在 Windows Vista 发行版中采用默认值 100 KB。

250KB 限制的原因是为了减少上传大型 web.config 文件的攻击。您可以通过更改注册表中的上限值来更改限制:

  HKLM\SOFTWARE\Wow6432Node\Microsoft\InetStp\Configuration\MaxWebConfigFileSizeInKB (REG_DWORD)

参见:Description of the registry keys that are used by IIS 7.0, IIS 7.5, and IIS 8.0

另一种选择是将 web.config 文件拆分为多个较小的文件。

您可以像 Neill 所说的那样将您的配置拆分成几个不同的文件。

您将拥有一个主 web.config 文件,您可以在其中通过将 configSource 属性添加到要拆分为其他文件的部分来引用子配置文件。

例如,如果您想在另一个文件中拆分“appsettings”部分,您可以将 web.config 文件中的 appSettings 部分更改为:

<appSettings configSource="appsettings.config" />

并且在 appsettings.config 文件中,您将添加所有应用程序设置条目,就像它们在原始 web.config 文件中一样,例如;

 <appSettings>
     <add key="aspnet:RestrictXmlControls" value="true" />
     <add key="FeedCacheTime" value="300" />
     <add key="FeedPageUrl" value="/_layouts/15/feed.aspx?" />
     <add key="FeedXsl1" value="/Style Library/Xsl Style Sheets/Rss.xsl" />
     <add key="aspnet:AllowAnonymousImpersonation" value="true" />
 </appSettings>

显然是改写地图。

因为我在共享环境中,所以除了将其移动到单个外部配置文件外没有其他解决方案,这又一次被限制为 250KB。

这就是我所做的:

我用访问量最高的重定向 填写了地图 ,当然还有任何可以使用模式重定向的 URL 组(因此它们会最快)。

对于重定向的剩余 100k 长尾,我将它们放入数据库中的 REDIRECTS table... 所以,在请求通过文件中的所有重写规则(以及当然,没有命中任何),它将请求默认为某个脚本。脚本做的第一件事就是检查重定向 table,如果条目存在,我会在代码中进行重定向……速度较慢,但​​ table 中的大部分内容是长尾,正如我所说,访问次数最多的重定向仍在文件中。到目前为止,这对我来说效果很好,我可以根据需要添加任意数量的重定向……例如如果页面 title/url 被编辑,我的管理区域会自动添加重定向等

我们在这个问题上纠结了很长时间,最后我们写了自己的 301 重定向器。在 sitecore 中,它位于 ItemResolver 之后修补的管道中,该管道使用大文件(不包含在任何 Web.configs 中)。我们无法使用 "registry hack" 选项,因为它是一个 Azure 服务应用程序,并且无法(简单且便宜)访问注册表。