即使 URL 模式在测试中匹配,通过 IIS 重写模块重定向书签 URLS 也无法正常工作

Redirect bookmarked URLS via IIS Rewrite Module is not working properly even though URL pattern matches in testing

我已经阅读了很多论坛并且我尽可能地做了我能做的。我的出站规则在为 SEO 目的重写 URL 方面起作用,但我的 Redict URL 万一我们用户书签中标记的更改 URL 不起作用。 我正在使用 IIS 10.0。

需要改变的URL:

http://agmodel.com/files/content/insights/publishing/e_clouds.pdf

收件人: http://agmodel.com/assets/content/insights/publishing/e_clouds.pdf

所以我唯一要更改的是字符串 "files" 到 "assets"。

这是我试过的:

尝试 1:

<rule name="Redirect" stopProcessing="true">
   <match url="(https?:\/\/[^\/]+)\/" />
   <conditions trackAllCaptures="true">
      <add input="{QUERY_STRING}" pattern="(https?:\/\/[^\/]+)\/files\/(.*)" />
      <add input="{REQUEST_URI}" pattern="^/assets" negate="true" />
   </conditions>
   <action type="Redirect" url="{R:1}/assets/{C:2}" appendQueryString="false" redirectType="Found" />
</rule>

我试图确保第一个模式始终是域,第二个模式是文件。

尝试 2:

<rule name="assets-to-files" stopProcessing="true">
   <match url="(https?:\/\/[^\/]+)\/files\/(.*)" />
   <action type="Redirect" url="{R:1}/assets/{C:1}" appendQueryString="false" logRewrittenUrl="true" />
   <conditions>
      <add input="{QUERY_STRING}" pattern="\/files\/(.*)" />
   </conditions>
</rule>

所以每当我测试书签的旧 URL 是否会更改为新书签时,它不起作用。它在 IIS 10 中的模式匹配测试期间亮起绿灯。

我在这里做错了什么?

你可以在这里使用一个非常简单的规则:

<rule name="assets-to-files">
  <match url="^files/(.*)" />
  <action type="Rewrite" url="assets/{R:1}" />
</rule>

您要匹配的URL是http://agmodel.com/files/content/insights/publishing/e_clouds.pdfmatch 节点中的 url 属性将接收 files/content/insights/publishing/e_clouds.pdf 作为输入,因此您需要

 ^files/(.*)

它将在字符串的开头匹配 files/,然后将捕获到 {R:1} 除了换行符之外的任何 0 个或更多字符。

action 节点 url 属性中,您只需指定 assets/ 新路径并将捕获的内容附加到 {R:1}.