[英]The rewrite provider error in an outbound rewrite rule
我正在支持一个包含 many.html 文件的网站。 该站点在 Windows 2016 上的 IIS 10 中运行。现在我被要求在<head>
之后立即插入以下 Google 跟踪代码管理器代码。
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'xyz.start':
new Date().getTime(),event:'xyz.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/xyz.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','xyz-ABCDEFG');</script>
显然,将这段代码手动插入到每个 html 文件中在很多方面都是一个坏主意。 我正在尝试使用出站规则来完成这项工作。 基本上,这个想法是用<head>
<head>
和上面的代码替换响应中的 <head>。 我通过 IIS 中的 Edit Outbound Rule 界面输入了它,以下是我保存后在 web.config 中得到的内容:
<rule name="GTM head" preCondition="IsHTML">
<match filterByTags="None" pattern="<head>" />
<action type="Rewrite" value="<head><script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'xyz.start':new Date().getTime(),event:'xyz.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/xyz.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','xyz-ABCDEFG');</script>" />
</rule>
但是,我在编辑出站规则界面中保存时在 IIS 中看到了此错误消息。
The rewrite provider "w[l]=w[l]||[];w[l].push({'xyz.start'" does not exist.
如果我加载 HTML 页面,浏览器会显示此错误:
HTTP Error 500.52 - URL Rewrite Module Error.
The page cannot be displayed because an internal server error has occurred.
非常感谢任何帮助或输入。
更新 1
在这篇文章之前,我查看并尝试了这篇文章(我的情况没有示例)
我也阅读并尝试了这篇文章
我无法让它工作。 基本上,不知道如何使它工作。
更新 2
我还被要求在<body>
标记之后立即插入这段代码,并且我能够成功使用出站规则。
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=xyz-ABCDEFG"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<rule name="GTM body" preCondition="IsHTML">
<match filterByTags="None" pattern="<body(\s*[^>]*)>" />
<action type="Rewrite" value="<body{R:1}><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WR7TNHP" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>" />
</rule>
做了更多阅读并找到了这篇文章:
https://blogs.iis.net/danielvl/how-to-escape-curly-brackets-in-url-rewrite-rule
基本上,解决方案是用这个 function 替换打开{
:
{UrlDecode:%7B}
希望这对将来的人有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.