.htaccess - 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]
任何人都可以帮忙吗?
谢谢
解决方案
它不起作用,因为当请求被 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)。
推荐阅读
- c - 在 MPI 中按顺序运行 for 循环的某些部分
- .net - 为避免使用 API,我不能只写入 Google Drive 文件夹吗?我如何找到它?
- docker - Docker:traefik 反向代理 + 自己的 dockerfile = 坏网关
- python - 为什么我的计算器 GUI 单元测试显示 AssertionError?
- scipy - sympy中符号和的复杂度
- react-native - 登录后如何隐藏按钮导航(React Native)
- material-ui - 用于 groupBy 标题的 Material UI 自动完成自定义 CSS
- javascript - 如何在字符串中获取选定的多复选框值
- firebase - Firebase 实时快照更新未在 vue 中更新
- azure - Az Powershell New-AzureADServiceAppRoleAssignment 哪个 id 是哪个?