Можно ли переписать URL-адрес канала rss xml с помощью iis urlrewrite2? - PullRequest
0 голосов
/ 11 июля 2020

В настоящее время я работаю над переписыванием URL-адресов моего старого веб-приложения, и мне интересно, можно ли переписать ссылки в RSS-потоке.

В настоящее время у меня есть это правило перезаписи исходящего трафика. Проблема в том, что ничего не происходит, если я добавляю ссылку в filterbytags, потому что 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>

Содержимое xml, которое я генерирую в файле aspx, выглядит следующим образом :

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

Можно ли переписать URL-адрес между тегами ссылок, или мне нужно сгенерировать уже переписанную ссылку? Я бы хотел избежать этого, так как это приведет к фрагментации urlrewrite, и я предпочитаю иметь все это в одном месте.

Если я сгенерирую ссылку на RSS-канал как 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>

1 Ответ

0 голосов
/ 13 июля 2020

После прочтения сообщения в блоге о взломе, добавляющем атрибут к ссылке с помощью перезаписи URL-адреса, мне удалось заставить его работать, используя некоторый экранирующий хак, чтобы обмануть правило перезаписи и создать правильную ссылку.

Использование rule:

<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-канал.

Я не продолжил идти по этому пути, и вместо этого предпочел предварительно перезаписать ссылки на каналы.

Это просто для того, чтобы кто-нибудь знал, что это действительно возможно, однако это своего рода взлом, поскольку вам нужно создать RSS-канал для работы с перезаписью, и если канал загружается в любом месте, где перезапись не включена, это приведет к недопустимому каналу RSS.

...