簡體   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