首页 > 解决方案 > htaccess:如何用特殊字符替换字符串?

问题描述

我想重定向 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]

任何人都可以帮忙吗?

谢谢

标签: .htaccess

解决方案


它不起作用,因为当请求被 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)。


推荐阅读