IIS 301从一个Controller重定向到另一个(包括参数)ASP.NET MVC

时间:2016-03-27 13:08:01

标签: asp.net-mvc redirect iis web-config

我重命名了一个控制器,现在想要对新网址RouteConfig。我更喜欢从IIS中进行操作,因此我不会污染我的site.com/old。我还想包括重定向中包含的任何参数。

我正在努力实现以下所有目标:

  • 301 site.com/new - > site.com/old/
  • 301 site.com/new/ - > site.com/old?foo=bar
  • 301 site.com/new?foo=bar - &gt; <rule name="Redirect Old to New" pattern="ECMAScript" stopProcessing="true"> <match url=".*\/old.*" /> <action type="Redirect" redirectType="Permanent" url="/new/{R:0}" /> </rule>

这是我到目前为止所得到的,但我无法让它发挥作用:

<!DOCTYPE html>
<html>
<head>
    <title>Sample</title>
</head>

<body>
    <div class="container">
        <form>
            <h4>Enter a binary value to convert into a decimal value.</h4>
            Binary number : <input type="number" id="num1" onkeyup="bintodec(num1.value)"><br/><br/>
            Result:<br/><br/>
            <div id="res"></div> 
        </form>                                                     
    <div>

</body>
<script type="text/javascript">

var tmp =0; 
function bintodec(b){
    len = b.length-1;
    if(b.charAt(0)==0||b.charAt(0)==1){
        if(b.charAt(0) == "1" && b != ""){
            tmp = tmp + Math.pow(2,len);
        }
        display(b);
    }
    else{
        tmp="Input may only contain ones and zeroes.";
        display("");
    }
}
function display(bn){
    if(bn.slice(1) == ""){
        document.getElementById('res').innerHTML=tmp;
        tmp = 0;
    }
    else{
        bn = bn.slice(1);
        bintodec(bn);
    }
}
</script>
</html>

1 个答案:

答案 0 :(得分:2)

问题似乎与您的RegEx有关。此上下文中的URL永远不会以/开头,您应始终匹配字符串^的开头。此外,您需要定义要捕获的内容,以便提供重定向URL的结尾。

<rule name="301 Redirect Old to New">
    <!--
      matches         /old
      matches         /old?foo=123
      matches         /old/?foo=123
      matches         /old/older/oldest?foo=123
      doesn't match   /oldee/whatever
    -->
    <match url="^old(?:/|(?=\?)|$)(.*)"/>
    <action type="Redirect" redirectType="Permanent" url="new/{R:1}"/>
</rule>

此外,出于搜索引擎优化的目的,我会说你用自己的第二选择射击自己。您应该始终使用尾部斜杠或从不使用重定向中的斜杠。选择一个然后保持一致,以便所有着陆网址都相同。

虽然使用IIS本身对301重定向没有任何问题,但如果采用这种方法,您应该确保自己足够熟练地创建正则表达式。如果你有一个正则表达式测试器实用程序,它也会有所帮助,以确保你所写的内容按照你期望的方式工作。

这里有一个很好的教程来学习正则表达式:http://www.regular-expressions.info/tutorial.html