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

时间:2019-02-22 17:30:06

标签: regex url-rewriting web-config url-redirection iis-10

我已经阅读了很多论坛,并且我可能会尽我所能。我的出站规则适用于出于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是否将更改为新URL时,它均不起作用。在IIS 10中进行模式匹配测试时,它会亮起绿灯。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您可以在此处使用一个非常简单的规则:

<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.pdfurl节点中的match属性将收到files/content/insights/publishing/e_clouds.pdf作为输入,因此您可以

 ^files/(.*)

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

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