是否可以使用 iis urlrewrite2 url 重写 rss xml 提要?

is it possible to url rewrite a rss xml feed using iis urlrewrite2?

我目前正在 url 重写我的旧 Web 应用程序,我想知道是否可以在 rss 提要中重写 links。

我目前有这个出站重写规则。问题是如果我在 filterbytags 中添加 link 什么也不会发生,因为据我所知 url 不是 href 属性。

<rule name="OutboundShowPost" preCondition="ResponseIsXml1">
   <match filterByTags="Link" pattern="^(.*/)pages/frontend/forum/showpost\.aspx\?forum=([^=&amp;]+)&amp;(?:amp;)?post=([^=&amp;]+)$" />
   <action type="Rewrite" value="{R:1}forum/{R:2}/post/{R:3}" />
</rule>

我在 aspx 文件中生成的 xml 内容如下所示:

<rss version="2.0">
   <channel>
      <title>test title</title>
      <link>https://example.com</link>
      <description>test description</description>
      <ttl>5</ttl>
      <item>
         <title>test title</title>
         <description>test description</description>
         <link>https://example.com/pages/frontend/forum/showpost.aspx?forum=other&post=&page=1#msg-17</link>
         <pubDate>Tue, 26 May 2020 13:41:18 GMT</pubDate>
      </item>
   </channel>
</rss>

是否可以重写 link 标签之间的 url,或者我是否必须生成已经重写的 link?我想避免这种情况,因为这会使 url 重写变得支离破碎,我更愿意将其全部放在一个地方。

如果我像这样将 rss 提要 link 生成为 href,它就可以工作,但这违反了标准,尽管一些 rss 读者仍然接受我也希望避免这种情况。

<rss version="2.0">
   <channel>
      <title>test title</title>
      <link>https://example.com</link>
      <description>test description</description>
      <ttl>5</ttl>
      <item>
         <title>test title</title>
         <description>test description</description>
         <link href="https://example.com/pages/frontend/forum/showpost.aspx?forum=other&post=&page=1#msg-17"  />
         <pubDate>Tue, 26 May 2020 13:41:18 GMT</pubDate>
      </item>
   </channel>
</rss>

阅读博客 post 后,关于使用 url 重写向 link 添加属性的黑客,我设法使用一些转义黑客来欺骗重写规则使其工作生成正确的 link.

使用规则:

<rule name="OutboundNewThreadsLink" preCondition="ResponseIsXml1">
   <match filterByTags="CustomTags" customTags="XmlTags" pattern="^(.*/)pages/frontend/forum/showpost\.aspx\?forum=([^=&amp;]+)&amp;(?:amp;)?post=([^=&amp;]+)&amp;(?:amp;)?page=([^=&amp;]+)$" />
   <action type="Rewrite" value="&quot;/&gt;&lt;link&gt;{R:1}forum/{R:2}/post/{R:3}/{R:4}&lt;/link&gt;&lt;copyright href=&quot;" />
</rule>

<customTags>
    <tags name="XmlTags">
       <tag name="category" attribute="href" />
    </tags>
</customTags>

将使此 rss xml:

<rss version="2.0">
   <channel>
      <title>test</title>
      <link>https://localhost:44347</link>
      <description>test</description>
      <ttl>5</ttl>
      <item>
         <title>test</title>
         <description>test</description>
         <category href="https://localhost:44347/pages/frontend/forum/showpost.aspx?forum=andet&post=17-traade-forsvinder"/>
         <pubDate>Tue, 26 May 2020 13:41:18 GMT</pubDate>
   </item>
</channel>
</rss>

显示为:

<rss version="2.0">
   <channel>
      <title>test</title>
      <link>https://localhost:44347</link>
      <description>test</description>
      <ttl>5</ttl>
      <item>
         <title>test</title>
         <description>test</description>
         <category href=""/>
         <link>https://localhost:44347/forum/andet/post/17-traade-forsvinder</link>
         <copyright href=""/>
         <pubDate>Tue, 26 May 2020 13:41:18 GMT</pubDate>
      </item>
   </channel>
</rss>

显然类别和版权不包含 href 属性,但您可以将此与 <guid isPermaLink="false"><source url=""> 或任何其他包含属性值的标签一起使用,以创建 100% 有效RSS 提要。

虽然我没有继续沿着这条路走下去,而是选择预先重写提要 links。

这只是为了让任何人知道这确实可能,但是有点 hack,因为您需要创建 rss 提要以使用重写,并且如果提要上传到任何未启用重写的地方,这将导致无效的 rss 提要。