【问题标题】:regex to remove the querystring and match the remaining segments from the url正则表达式删除查询字符串并匹配 url 中的剩余段
【发布时间】:2019-10-29 14:32:28
【问题描述】:

npinti 帮助我创建了一个正则表达式来删除查询字符串并匹配来自 url /seattle/restaurant/sushi?page=2 的剩余部分:“类似的东西应该产生 3 个组:/(.*?)/(restaurant)/([^?]+).*. 第 1 组是座位,第 2 组是餐厅和组3 是寿司。如果在最后一个 / 之后有一个 ?,则正则表达式会丢弃 ? 以及后面的所有内容。"

我尝试修改上述内容以对 url /seattle/restaurant?page=2 执行相同的技巧,但我无法正确处理。我不知道是否会有查询字符串或查询字符串的参数。所以我需要上面正则表达式的灵活性,它将匹配并丢弃 ?以及接下来的一切。

【问题讨论】:

    标签: regex url-rewriting


    【解决方案1】:

    您的重写规则可能如下所示:

    RewriteRule /([^/]+)/restaurant/([^/]+)$ mynewpage.php?group1=$1&group2=$2 [QSA,NC,L]
    

    感谢我在下面提供的链接,您可以搜索 QSA、NC 和 L 的含义。


    很抱歉,您的问题听起来很像“我不是很好,所以有人可以为我做这项工作吗?”。我的意思是,看看周围,你会得到很多答案,只是把手弄脏。


    如果这还不够:

    两个提示:

    如果您不是在托管环境中(= 如果它是您自己的服务器并且您可以修改虚拟主机,不仅是.htaccess 文件),尝试使用RewriteLog 指令:它可以帮助您追踪此类问题:

    # Trace:
    # (!) file gets big quickly, remove in prod environments:
    RewriteLog "/web/logs/mywebsite.rewrite.log"
    RewriteLogLevel 9
    RewriteEngine On
    

    我最喜欢的检查正则表达式的工具:

    http://www.quanetic.com/Regex(别忘了选择 ereg(POSIX) 而不是 preg(PCRE)!)

    【讨论】:

    • 嗨,奥利维尔。你是对的,我对正则表达式不是很熟练,我希望知道正则表达式的人可以很直接地解决我的问题。无论如何,我自己研究了正则表达式,并通过ultrapico.com 使用 Expresso 将一些有用的东西放在一起
    【解决方案2】:

    这应该允许您匹配? 之前的所有文本,而不是其他任何内容。如果不存在?,它将匹配所有内容:

    [^?]*
    

    这就是你需要做的一切吗?因为/(.*?)/(restaurant)/([^?]+).*. 看起来像是为了做一些更复杂的事情。

    【讨论】:

      猜你喜欢
      • 2016-09-23
      • 2017-08-31
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多