我已经阅读了很多论坛,并且我可能会尽我所能。我的出站规则适用于出于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中进行模式匹配测试时,它会亮起绿灯。
我在这里做错了什么?
答案 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.pdf
。 url
节点中的match
属性将收到files/content/insights/publishing/e_clouds.pdf
作为输入,因此您可以
^files/(.*)
它将与字符串开头的files/
匹配,然后将除换行符以外的任何0个或多个字符捕获到{R:1}
中。
在action
节点url
属性中,只需指定新的assets/
路径并将捕获的内容附加到{R:1}
中。