2016-09-16 92 views
0

我想为我的web.config中的重定向规则写一条规则。web.config中的IIS url重定向规则

我想重定向像URL ...

http://www.example.net/profile/username

到...

http://www.example.net/#/profile/username

我已经添加了以下运行,但它似乎并没有工作。做这个的最好方式是什么?

<rule name="Redirect to hashed profile" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions> 
       <add input="{HTTP_HOST}{REQUEST_URI}" pattern="on" ignoreCase="true" pattern="^.net/profile/*"/> 
      </conditions> 
      <action type="Redirect" url="https://{HTTP_HOST}/#/{REQUEST_URI}" redirectType="Permanent" appendQueryString="true" /> 
     </rule> 

回答

1

以下是发生了什么事以及如何修复它。

pattern="^.net/profile/*" 

^锚文本到你的HTTP_HOST是www.example.com的开头,以便^.net意味着你的URL必须与任何1个字符.,然后字net开始。我要去承担你的意思是你想匹配字面.,为了做到这一点,你必须转义为\.

您还可以逃离/\/*在一个斜线结束只是意味着比赛无限的斜线,但你希望它匹配斜线无限次之后的任何字符,所以它的.*

让我们重写模式,因为我们不能使用^,因为你的网站不.net

启动
pattern="\.net\/profile\/.*" 

这会给你这个..

<add input="{HTTP_HOST}{REQUEST_URI}" pattern="on" ignoreCase="true" pattern="\.net\/profile\/.*"> 

但是你真的需要{HTTP_HOST}?这真的取决于这是否是全球性规则,如果它不是全球性规则,并且它在应用程序级别。那你就不需要它了。

现在您可以重新加入^,将单词profile固定到REQUEST_URI的第一部分。

<add input="{REQUEST_URI}" pattern="on" ignoreCase="true" pattern="^profile\/.*">