如何修复查询重定向?

如何修复查询重定向?

我有旧的和新的 URL 路径,我想编写重定向规则,因此有 2 个带有查询字符串的旧路径版本:

/cgi-bin/something?123
/cgi-bin/something?keywords=123&offset=120

都重定向到新路径:

/catalogsearch/advanced/result/?something[]=789

下面是我写的 2 条规则(我使用映射文件来使 ID 解析为 123 -> 789)

RewriteCond %{REQUEST_URI} /cgi-bin/something?
RewriteCond %{QUERY_STRING} ^([0-9]{1,})$
RewriteRule "^cgi-bin/something?"   "/catalogsearch/advanced/result/?something\[\]=${something:%1|NOTFOUND}" [R=307,L]

RewriteCond %{REQUEST_URI} /cgi-bin/something?
RewriteCond %{QUERY_STRING} ^keywords=([0-9]{1,})$
RewriteRule "^cgi-bin/something?"   "/catalogsearch/advanced/result/?something\[\]=${something:%1|NOTFOUND}" [R=307,L]

第一部分是路径的第一个版本,第二部分是其他版本(带有关键字)。第一部分工作正常,第二部分似乎与查询字符串不匹配。

如何修复?

答案1

对于你的第二个重写表达式

RewriteCond %{REQUEST_URI} /cgi-bin/something?
RewriteCond %{QUERY_STRING} ^keywords=([0-9]{1,})$

此匹配将匹配字符串

/cgi-bin/something?keywords=123

但会不是匹配

/cgi-bin/something?keywords=123&offset=120

您使用的正则表达式中^keywords=([0-9]{1,})$有一个美元符号 ( $),表示在由 0 到 9 之间的一个或多个数字组成的组之后,紧接着是行尾。

&offset=120URI 末尾的部分导致角色不匹配。

您可以按如下方式更改正则表达式,这将在行尾之前的数字组后添加零个或多个字符。但是,这可能也不是您想要的。这取决于您想要重写的 URL。确定之后您想要匹配的内容(您想要“&offset”吗?)并相应地修改正则表达式。

RewriteCond %{QUERY_STRING} ^keywords=([0-9]{1,}).*$

PS-我发现本网站对于可视化正则表达式很有用。

相关内容