我重命名了一个控制器,现在想要对新网址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>
答案 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