【问题标题】:How can I transform this url with REGEX?如何使用 REGEX 转换此网址?
【发布时间】:2013-06-30 03:02:46
【问题描述】:

我有一个使用 DotNetNuke 构建的动态 Web 应用程序,它使用以下 url 格式:

/SeoDummy.aspx?template={VAR1}&keywords={VAR2}

我的用户友好 url 格式是这样的:

http://domain.com/.{VAR1}/{VAR2}

我对 REGEX 真的很糟糕,需要以某种方式检测何时请求用户友好的 url,并用动态 Web 应用程序 url 重写它。我已经尝试了以下方法,但它没有在网站上捕捉到它,它只是 404'ing:

.*/^([^/]+)/([^/]+)/?$

我相信知道正则表达式的你会觉得我的尝试很愚蠢,但正则表达式是我的氪石!

感谢您提供的任何帮助。

【问题讨论】:

  • 这是针对任何查询字符串参数还是严格使用参数templatekeywords
  • 只需要这两个参数
  • 对我来说需要这个的主要问题是,我一直在使用配置文件进行所有重写,但网站增长迅速,他们有大约 55,000 个遵循这种模式的 url,网站的内存使用量是尖峰和性能严重下滑。

标签: c# regex url-rewriting dotnetnuke


【解决方案1】:

由于您使用的是一些自定义 url,我想正则表达式会比使用 URI 类更好


在你的正则表达式中你放错了^..正则表达式应该是

^https?://domain[.]com/[.]([^/]+)/([^/]+)/?$

【讨论】:

  • +1。重写将是:/SeoDummy.aspx?template={R:1}&keywords={R:2}
  • 这个可行,但我怎样才能使它只有在点存在时才会匹配?
  • 好的,我明白了..: */\.([^/]+)/([^/]+)/?$
  • @box86rowh 你想在哪里匹配.
【解决方案2】:

我还没有测试过,但试一试,告诉我它是如何工作的:

domain[.]com/\.([^/]+)/([^/]+)/?$

除了第一克拉标记字符串的开头之外,您似乎大部分都正确...这是不可能的,因为您在它前面指定了.*!您还错过了{VAR1} 前面的时间段(除非那是一个错字?)。

我也不会把.*放在开头,因为那样你可能会捕获VAR1 = domain.comVAR2 = something that is actually VAR1

如果你想对你的氪石免疫,那么这个网站非常适合查找东西: http://www.regular-expressions.info/reference.html

【讨论】:

  • UPVOTE - 感谢您的意见!
猜你喜欢
  • 1970-01-01
  • 2017-05-06
  • 2022-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
相关资源
最近更新 更多