我正在使用下面的代码。
RewriteCond %{QUERY_STRING} ^brands=(.*)&features=(.*)$
RewriteRule ^products/([_A-Za-z0-9-]+)$ index.php?brands=%1&features=%2
但是,这需要两个值。比如只给出品牌价值就行不通。
示例:x.com/?products?brands=2,4,5 不起作用
示例:x.com/?products?brands=2,4,5&features=3,6,8 Works
这是什么原因造成的,解决办法是什么?另外,如何完全自定义参数。
那么如何才能让key和value唯一呢?
示例:x.com/products?any=any&any=any.....
现有代码的问题在于,它的编写目的是专门匹配 QUERY_STRING 中的品牌和功能查询参数。当仅传递一个参数(品牌)时,RewriteCond 中的正则表达式 (^brands=(.)&features=(.)$) 不匹配,因此规则不会触发。这就是为什么 x.com/?products?brands=2,4,5 不起作用。
当前条件 (RewriteCond %{QUERY_STRING} ^brands=(.)&features=(.)$) 期望查询字符串中同时存在品牌和功能,因此如果缺少功能,正则表达式将失败。
解决方案: 为了解决这个问题,我们需要修改条件来处理存在品牌或功能的情况。此外,为了支持具有动态键的灵活自定义参数,我们应该允许在查询字符串中匹配可选参数的可能性。
第1步:修改RewriteCond以处理可选参数 我们将更新正则表达式以匹配品牌和功能参数(如果存在),但也允许丢失参数。
如果您想完全自定义参数并使键值对灵活(例如,x.com?any=any&another=another),您可以修改 RewriteCond 以匹配查询字符串中的任何键值对。
以下是如何使参数动态化的示例:
RewriteCond %{QUERY_STRING} (^|&)([^=]+)=([^&]+)(&|$) RewriteRule ^产品/([_A-Za-z0-9-]+)$index.php?%2=%3 [L]
注意事项: 新代码将允许在查询字符串中使用灵活的键值对,其中键和值是动态的,例如any=any或brands=2,4,5&features=3,6,8。 该方法将根据查询字符串内容动态重写所有参数。