これは、1つのパラメーターを検出し、次のステップに転送してから最終的な宛先にリダイレクトすることにより、複数のステップで実現できます。
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
、次を使用できます
RewriteCond %{QUERY_STRING} (?:^|&)category=([^&]+) [NC]
@TrueBlueが提案したように。
別のアプローチは、TestString QUERY_STRING
の前にアンパサンド&
を付け、常にチェックすることです。
RewriteCond &%{QUERY_STRING} &category=([^&]+) [NC]
この手法( TestStringの前に付ける)を使用して、既に見つかったパラメーターを次のパラメーターに繰り越すこともできますRewriteCond
。これにより、3つのルールを1つに簡略化できます
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
。