apache dispatcher 重写查询字符串规则

问题描述 投票:0回答:1

我需要将一个带有查询字符串的URL重写成另一个URL。

例如,我有 https://www.something.com/cat/man/clothing/?colourfilter=blue_red

需要重写为 https://www.something.com/cat/man/clothing.html/colourfilter=blue_red

我试着按照教程在 https:/simonecarletti.comlog200901apache-query-string-redirects。

我目前的尝试如下。

RewriteCond %{QUERY_STRING} ^colourfilter=([a-zA-Z][0-9]-*)$
RewriteRule ^(.)$ (.*).html/colourfilter=%1 [R302,L]

我不能让它工作。

java regex apache aem dispatcher
1个回答
1
投票

你可以试试。

(.*)\/\?(.*)

以上regex的解释。

(.*) - 表示先捕获组捕获查询字符串之前的url部分,然后再离开 \?.

\/\?(.*) - 代表第二个捕获组,捕获查询字符串的部分,剩下的则是查询字符串。\?.

$1.html/$2 - $1 代表第一个被抓获的小组,而 $2 第二组被抓的人。如果 $ 不见得,请换成 \\. 这将提供必要的替换。

pictorial representation

你可以在下面找到上述regex的演示。在这里,你的RewriteCond无法匹配正确的查询字符串。


0
投票

你的RewriteCond不能匹配正确的查询字符串,你的regex现在说它应该匹配任何以字母a-z或A-Z开头的字符串,然后是数字,然后可能是多次'-'。如果你使用 https:/regex101.com 你会发现,例如 colourfilter=a9------ 匹配您的regex,这是不正确的。你可以使用 ^colourfilter=([a-zA-Z0-9]*_[a-zA-Z0-9]*)$ 作为regex,它应该符合你的例子并满足你的需求,用这个regex,任何以数字字母开头的查询字符串,然后是下划线,再加上一些数字或字母都会匹配。

© www.soinside.com 2019 - 2024. All rights reserved.