C# 正则表达式重定向

C# 正则表达式重定向,c#,regex,url-redirection,C#,Regex,Url Redirection,我想从设置重定向 www.somesite.com/products/dynamicstring/randomtext1/randomtext2 访问www.somesite.com/products/dynamicstring 可以通过正则表达式来实现吗 这意味着如果我的incming url是 www.somesite.com/products/myproducts/test1/test2它应该重定向到www.somesite.com/products/myproducts/ 只是简单介绍一

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

可以通过正则表达式来实现吗

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

只是简单介绍一下:
@TomLord我使用的是HttpContext.Current.Response.RedirectPermanent(matchingDefinition.To)我拥有类对象中所有的重定向“From”和“To”,以正则表达式的形式。例如在From“/product/*”和To“/products”中,我正在读取这些对象并尝试重定向它们,但是我不能重定向像/products/dynamicstring/randomtext1/到/products/dynamicstring这样的东西,因为动态字符串是随机字符串,我找不到任何可以用来执行此操作的正则表达式。例如/products/samples/randomtext1应该重定向到/products/samples/

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

话虽如此,regex可以帮我们做你想做的事。我假设你可以使用Javascript,因为我不能用每种语言给出一个解决方案。我还假设您将尝试检查代码,而不是复制粘贴,然后按enter键。如果你只需要这个,请雇一个程序员。如果您使用另一种语言,原则应相同:

  • 获取URL
  • 定义正则表达式
  • 使用“捕获组”提取您需要的URL部分
  • 构造一个新的URL
  • 重定向到它
虽然匹配URL通常比较复杂,例如:

^(?:https?://)?(?:[\w]+\.)(?:\.?[\w]{2,})+$
只要你确定你只会得到你想要的URL和格式,我们会做得简单得多

基本上,假设你有:

  • 某些文本带有以com结尾的2个点

  • 然后是a/products/dynamicstring/

  • 然后发短信

  • 然后/

  • 然后发短信

作为正则表达式,即:

/\w*.\w*.com\/products\/dynamicstring\/\w*\/\w*/g
Curde匹配已完成,但我们仍需要添加一个捕获组,用于提取所需字符串的一部分:

/(\w*.\w*.com\/products\/)dynamicstring\/\w*\/\w*/g
好了,现在让我们利用这个正则表达式来完成剩下的工作:

定义正则表达式:

var regex = /\w*.\w*.com\/products\/dynamicstring\/\w*\/\w*/g;
获取当前URL。如果您已经有URL,请使用它

var currUrl = window.location.href;
从字符串中提取捕获组:

var match = regex.exec(currUrl);
使用该选项从旧URL获取新URL:

var redirectUrl =  match[1] + myproducts/
最后,我们用以下方法重定向:

window.location.replace(redirectUrl);

所有这些我都是直接从脑海中写出来的,所以我建议你仔细检查每一步,看看它是如何工作的,阅读一些关于所使用函数的文档。您可能会发现一个错误,也会学到很多东西。

注意堆栈溢出不是免费的代码编写服务。如果您可以访问服务器,您可以使用规则重定向一些内容,如您迄今为止尝试的内容?你有什么问题?您试图在什么语言/平台上实现此重定向?(例如,
nginx
?)从您的示例来看,您可能对URL重写而不是HTTP重定向感兴趣?正则表达式实际上只能以特定的方式表示字符串或字符串的一部分。因此,正如其他人所说,您可以使用正则表达式在旧URL的基础上获取一个新URL,然后重定向到新URL。@PeterAbolins我只使用http重定向我愿意打赌您的假设是错误的:“我还假设您将试着检查代码,而不是复制粘贴并按enter键”。我希望如此。如果不是他,也许其他人会觉得这很有用:)我也记得我还是noob的时候,regex看起来很强大但很可怕,我问不出正确的问题。谢谢@Dantehesmith,我会努力学习并实现它,肯定不会做复制粘贴:)@Dantehesmith谢谢你的详细讲解,我喜欢分享两件事:我的产品不是静态的,它可以是动态的,它基本上是产品系列,可以是任何东西,所以我们不能在正则表达式中使用这个硬编码,第二个url可能太长,例如/products/productfamily//a/b/c/d也应该重定向到product/productfamily我正在使用_regex.IsMatch(pageUrl);所以我有正则表达式,但它没有满足我的要求,我会尝试更多的东西。