代码之家  ›  专栏  ›  技术社区  ›  Thomas Carlton

htaccess:如何用特殊字符替换字符串?

  •  0
  • Thomas Carlton  · 技术社区  · 6 年前

    我想重定向URL:

    https://www.example.com/blablabla,?trx_id=TX-23
    

    https://www.example.com/blablabla,TX-23
    

    基本上,我想删除字符串: ?trx_id=

    我尝试了以下方法,但它不起作用。这似乎与特殊人物有关

    RewriteRule ^(.+)?trx_id=(.+)$ $1$2 [R=301,L]
    

    有人能帮忙吗?

    谢谢

    0 回复  |  直到 6 年前
        1
  •  1
  •   luciole75w    6 年前

    它不起作用,因为当apache解析请求时,它被分为几个部分:主机、端口、路径和查询字符串。指令RewriteRule与url路径匹配,即: blabla, 在您的示例中,当参数被放入查询字符串中时 trx_id=TX-23 (去掉问号)。 要与查询字符串匹配,您必须使用这样的条件。

    RewriteCond %{QUERY_STRING} ^trx_id=(.+)$
    RewriteRule ^(.+) /$1%1 [R=301,QSD,L]
    

    该条件仅影响其后续规则。反向引用,如$N,指的是规则模式,%N指的是条件模式。

    还要注意QSD标志以丢弃初始查询字符串,否则它将保留在重写的请求中(至少在apache 2.4中是这样,注意apache 2.2是肯定的)。