【问题标题】:Rewrite path segments with name value pairs to query parameters用名称值对重写路径段以查询参数
【发布时间】:2020-07-09 17:12:11
【问题描述】:

我想使用正则表达式将漂亮的 url 重写为我的 .htaccess 文件中的查询参数。

这样:

https://www.example.com/s/file/name1/value1/name2/value2/name3/value3

被重写为:

https://www.example.com?file.htm?name1=value1&name2=value2&name3=value3

它需要处理可变数量的名称对值。它将包括至少一个名称值对。例如,它需要与https://www.example.com/s/file/name1/value1https://www.example.com/s/file/name1/value1/name2/value2 一起使用

https://www.example.com/s/file/name1/value1/name2/value2/name3/value3 中的s 表示应该触发重写规则:所有其他 url 都应该保持不变。 file 值是 htm 文件的名称,所以它可以有不同的值。

regex101.com我试过了:

  • 模式:\/([^\/]+)(\/)([^\/]+)
  • 替换:$1=$3&
  • 在字符串上:/s/new/v/123/c/42
  • 然后返回:s=new&v=123&c=42&

但它应该返回:new.htm?v=123&c=42

所以我已经成功地让它与可变数量的名称值对一起工作。但我就是想不通如何让它先经过snew,然后动态替换名称值对。

我没有在 regex101 中包含 https://www.example.com/,因为在 .htaccess 文件中假定了初始域。

我找到了this method,但它似乎适用于固定数量的值对。

我还查看了 this post,其中包含大量信息,但没有解决此特定问题的方法。

【问题讨论】:

标签: regex .htaccess mod-rewrite pretty-urls


【解决方案1】:

最后我简化了我需要的东西。在我放的 htaccess 文件中:

RewriteRule ^v/([^/]+)/([^/]+) /voucher/$1.htm?v=$2 [NC,R,L]

所以现在一个漂亮的 url 看起来像

https://www.example.com/v/page/id 

被重写为

https://www.example.com/voucher/page.htm?v=id

【讨论】:

  • 感谢您分享您的答案,如果您的网址在您显示的示例/ 方面与/ 相同级别,请告诉我https://www.example.com/s/file/name1/value1/name2/value2/name3/value3 然后我可以尝试在这里写,干杯.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
相关资源
最近更新 更多