apache 调度程序重写查询字符串规则
apache dispatcher rewrite query string rule
我需要将带有查询字符串的 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.com/blog/2009/01/apache-query-string-redirects/
上的教程进行操作
我目前的尝试如下:
RewriteCond %{QUERY_STRING} ^colourfilter=([a-zA-Z][0-9]-*)$
RewriteRule ^(.)$ (.*).html/colourfilter=%1 [R302,L]
我无法让它工作。
您的 RewriteCond 不会匹配正确的查询字符串,您的正则表达式现在表示它应该匹配任何以字母 a-z 或 A-Z 开头的字符串,然后是数字,然后可能是多次“-”。如果您使用 https://regex101.com/ ,您会注意到例如 colourfilter=a9------
匹配您的正则表达式,这是不正确的。您可以使用 ^colourfilter=([a-zA-Z0-9]*_[a-zA-Z0-9]*)$
作为正则表达式,它应该匹配您的示例并满足您的需求,使用此正则表达式,任何以几个 numbers/letters 开头的查询字符串,然后是下划线,然后再匹配一些数字或字母。
你可以试试:
(.*)\/\?(.*)
上面正则表达式的解释:
(.*)
- Represents first capturing group capturing the part of url before a query string leaving \?
.
\/\?(.*)
- Represents a second capturing group capturing the query string part leaving the \?
.
.html/
- </code> represents the first captured group and <code>
the second captured group. If $
doesn't work try replacing with \
. This will provide the necessary replacement.
你可以在here.
中找到上述正则表达式的演示
我需要将带有查询字符串的 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.com/blog/2009/01/apache-query-string-redirects/
上的教程进行操作我目前的尝试如下:
RewriteCond %{QUERY_STRING} ^colourfilter=([a-zA-Z][0-9]-*)$
RewriteRule ^(.)$ (.*).html/colourfilter=%1 [R302,L]
我无法让它工作。
您的 RewriteCond 不会匹配正确的查询字符串,您的正则表达式现在表示它应该匹配任何以字母 a-z 或 A-Z 开头的字符串,然后是数字,然后可能是多次“-”。如果您使用 https://regex101.com/ ,您会注意到例如 colourfilter=a9------
匹配您的正则表达式,这是不正确的。您可以使用 ^colourfilter=([a-zA-Z0-9]*_[a-zA-Z0-9]*)$
作为正则表达式,它应该匹配您的示例并满足您的需求,使用此正则表达式,任何以几个 numbers/letters 开头的查询字符串,然后是下划线,然后再匹配一些数字或字母。
你可以试试:
(.*)\/\?(.*)
上面正则表达式的解释:
(.*)
- Represents first capturing group capturing the part of url before a query string leaving\?
.
\/\?(.*)
- Represents a second capturing group capturing the query string part leaving the\?
.
.html/
-</code> represents the first captured group and <code>
the second captured group. If$
doesn't work try replacing with\
. This will provide the necessary replacement.
你可以在here.
中找到上述正则表达式的演示