您可以通过多个步骤来实现这一点,方法是检测一个参数,然后转发到下一步,然后重定向到最终目的地
RewriteEngine On
RewriteCond %{QUERY_STRING} ^category=([^&]+) [NC,OR]
RewriteCond %{QUERY_STRING} &category=([^&]+) [NC]
RewriteRule ^index\.php$ $0/%1
RewriteCond %{QUERY_STRING} ^subcategory=([^&]+) [NC,OR]
RewriteCond %{QUERY_STRING} &subcategory=([^&]+) [NC]
RewriteRule ^index\.php/[^/]+$ $0/%1
RewriteCond %{QUERY_STRING} ^product=([^&]+) [NC,OR]
RewriteCond %{QUERY_STRING} &product=([^&]+) [NC]
RewriteRule ^index\.php/([^/]+/[^/]+)$ http://store.example.com/$1/%1/? [R,L]
为避免OR
and 双重条件,您可以使用
RewriteCond %{QUERY_STRING} (?:^|&)category=([^&]+) [NC]
正如@TrueBlue 建议的那样。
另一种方法是在TestString 前面 QUERY_STRING
加上 &&
号,并始终检查
RewriteCond &%{QUERY_STRING} &category=([^&]+) [NC]
这种技术(为TestString加上前缀)也可用于将已经找到的参数传递到下一个RewriteCond
。这让我们可以将三个规则简化为一个
RewriteCond &%{QUERY_STRING} &category=([^&]+) [NC]
RewriteCond %1!&%{QUERY_STRING} (.+)!.*&subcategory=([^&]+) [NC]
RewriteCond %1/%2!&%{QUERY_STRING} (.+)!.*&product=([^&]+) [NC]
RewriteRule ^index\.php$ http://store.example.com/%1/%2/? [R,L]
!
仅用于将已找到并重新排序的参数与QUERY_STRING
.