我需要将一个带有查询字符串的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]
我不能让它工作。
你可以试试。
(.*)\/\?(.*)
以上regex的解释。
(.*)
- 表示先捕获组捕获查询字符串之前的url部分,然后再离开\?
.
\/\?(.*)
- 代表第二个捕获组,捕获查询字符串的部分,剩下的则是查询字符串。\?
.
$1.html/$2
-$1
代表第一个被抓获的小组,而$2
第二组被抓的人。如果$
不见得,请换成\\
. 这将提供必要的替换。
你可以在下面找到上述regex的演示。在这里,你的RewriteCond无法匹配正确的查询字符串。
你的RewriteCond不能匹配正确的查询字符串,你的regex现在说它应该匹配任何以字母a-z或A-Z开头的字符串,然后是数字,然后可能是多次'-'。如果你使用 https:/regex101.com 你会发现,例如 colourfilter=a9------
匹配您的regex,这是不正确的。你可以使用 ^colourfilter=([a-zA-Z0-9]*_[a-zA-Z0-9]*)$
作为regex,它应该符合你的例子并满足你的需求,用这个regex,任何以数字字母开头的查询字符串,然后是下划线,再加上一些数字或字母都会匹配。