正则表达式重定向

时间:2017-10-03 12:14:15

标签: c# regex url-redirection

我想设置重定向 www.somesite.com/products/dynamicstring/randomtext1/randomtext2 到www.somesite.com/products/dynamicstring

是否可以通过Regex实现这一目标?

这意味着如果我的网址是 www.somesite.com/products/myproducts/test1/test2它应该重定向到www.somesite.com/products/myproducts /

只是简要介绍一下这个: @TomLord我正在使用HttpContext.Current.Response.RedirectPermanent(matchingDefinition.To)我在一个类对象中以REGEX表达式的形式重定向“From”和“To”。例如From“/ product / *”和“/产品”,我正在阅读这些对象,并尝试重定向它们,但我无法将/ products / dynamicstring / randomtext1 /重定向到/ products / dynamicstring,其中动态字符串是随机字符串,我没有找到任何正则表达式,可用于执行此操作。例如/ products / samples / randomtext1应该重定向到/ products / samples /

1 个答案:

答案 0 :(得分:1)

单独使用regex无法完成重定向。谷歌有点什么是现实中的正则表达。简短的回答是:它是描述搜索模式的字符串式表达式。所以它不能重定向,甚至不能用子串替换子串或做任何其他事情,然后匹配并捕获匹配字符串的部分。

话虽这么说,正则表达式可以帮助我们做你想做的事。我假设您可以使用Javascript,因为我无法在每种语言中使用解决方案。我也会假设您将尝试查看代码而不是复制粘贴并按Enter键。如果你只需要聘请程序员。如果您使用其他语言,原则应该是相同的:

  • 获取网址
  • 定义正则表达式
  • 使用捕获组提取您需要的网址部分
  • 构建新网址
  • 重定向到它

虽然匹配URL通常比较复杂,例如:

^(?:https?://)?(?:[\w]+\.)(?:\.?[\w]{2,})+$

只要您确定只会获得您想要的网址,我们就会更加简单。

基本上,我们说你有:

  • 一些带有2个点的文字以com

  • 结尾
  • 然后是/ products / dynamicstring /

  • 然后发短信

  • 然后/

  • 然后发短信

作为正则表达式:

/\w*.\w*.com\/products\/dynamicstring\/\w*\/\w*/g

完成了Curde匹配,但是我们仍然需要添加一个捕获组,我们将使用它来提取我们需要的部分字符串:

/(\w*.\w*.com\/products\/)dynamicstring\/\w*\/\w*/g

Oke,现在让我们利用这个正则表达式完成剩下的工作:

定义正则表达式:

var regex = /\w*.\w*.com\/products\/dynamicstring\/\w*\/\w*/g;

获取当前网址。如果您已经有URL使用它。

var currUrl = window.location.href;

从字符串中提取捕获组:

var match = regex.exec(currUrl);

使用它从旧的URL获取新URL:

var redirectUrl =  match[1] + myproducts/

最后,我们重定向:

window.location.replace(redirectUrl);

我直接从头脑中写下了这一切,所以我建议你仔细阅读每一步,看看它是如何工作的,阅读一些关于所用函数的文档。您可能会发现错误并学到很多东西。