繁体   English   中英

出站重写规则中的重写提供程序错误

[英]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="&lt;head>" />
    <action type="Rewrite" value="&lt;head>&lt;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'?'&amp;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');&lt;/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

在这篇文章之前,我查看并尝试了这篇文章(我的情况没有示例)

https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-20-configuration-reference#Tag_Filters

我也阅读并尝试了这篇文章

https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-20-configuration-reference#Tag_Filters

我无法让它工作。 基本上,不知道如何使它工作。

更新 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="&lt;body(\s*[^>]*)>" />
    <action type="Rewrite" value="&lt;body{R:1}>&lt;noscript>&lt;iframe src=&quot;https://www.googletagmanager.com/ns.html?id=GTM-WR7TNHP&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;display:none;visibility:hidden&quot;>&lt;/iframe>&lt;/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM