【发布时间】: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/value1 和https://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
所以我已经成功地让它与可变数量的名称值对一起工作。但我就是想不通如何让它先经过s 和new,然后动态替换名称值对。
我没有在 regex101 中包含 https://www.example.com/,因为在 .htaccess 文件中假定了初始域。
我找到了this method,但它似乎适用于固定数量的值对。
我还查看了 this post,其中包含大量信息,但没有解决此特定问题的方法。
【问题讨论】:
-
您将无法使用 RewriteCond 中的正则表达式来执行此操作。您必须使用
RewriteMap和自定义 perl ou python 脚本。 httpd.apache.org/docs/2.4/en/rewrite/rewritemap.html#prg
标签: regex .htaccess mod-rewrite pretty-urls