【问题标题】:mod_rewrite keep square brackets in URLmod_rewrite 在 URL 中保留方括号
【发布时间】:2020-07-07 03:26:35
【问题描述】:

我正在尝试使用 mod_rewrite 重写 URL,但保留方括号,因为它是脚本需要处理的:

RewriteRule ^(order|cart)/([0-9]+)/([0-9]+)/?$ /cart?a=add&pid=$2&addons\[$3\] [L,NE]

不幸的是,上面的 URL 被翻译如下: 从:https://example.com/order/1/5https://example.com/cart?a=add&pid=1&addons%5B7%5D=

这是我需要的 URL 结果: 从https://example.com/order/1/5https://example.com/cart?a=add&pid=1&addons[5]

我需要方括号 [$3] 在 URL 中保留为方括号,而不是在 mod_rewrite 中更改为转义字符 %5B 和 %5D。不,添加反斜杠并不能解决这个问题。我还尝试了“B”标志和其他标志。

有什么帮助吗?

谢谢!

【问题讨论】:

  • 您的预期结果是什么?请添加。
  • @Mandy8055 刚刚编辑添加
  • 网址中不能使用标点符号? index.html 中的点呢? ;-)

标签: regex apache mod-rewrite


【解决方案1】:

NE 标志是正确的,但它可能会因为您在规则中转义方括号而感到困惑。第二个参数不是正则表达式,您不必转义这些。

所以,这应该可行:

RewriteRule ^(order|cart)/([0-9]+)/([0-9]+)/?$ /cart?a=add&pid=$2&addons[$3] [L,NE]

【讨论】:

  • 不幸的是,这是我首先尝试的,但没有成功。方括号仍会转换为转义字符 %5B 和 %5D 带或不带反斜杠
  • 请记住重定向会被您的浏览器缓存。确保每次更改规则后清空缓存。
  • 是的,我尝试仅使用隐私浏览。还有其他建议吗?也许使用 RewriteMap?
  • RewriteMaps 只是映射集合,它不会解决这个问题。在尝试隐私浏览时,您每次都打开一个新的隐私窗口?同一个私人窗口将缓存东西。您是否也可以尝试添加 R 标志并查看您最终得到的 URL 是否已编码?
  • 是的,我每次都打开一个全新的私人窗口,因为我熟悉缓存问题。不幸的是,“R”标志没有改变任何东西,仍然编码方括号......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 2011-10-11
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 2021-10-20
相关资源
最近更新 更多