2016-09-08 1 views
0

Meine Rewrite-Regel führt nicht mehrere Rewrite-Map-Lookups durch, und ich bin nicht sicher, warum. Ich versuche, meine Nutzer auf eine neue URL-Suchstruktur umzuleiten. Die Rewrite-Regel funktioniert nicht, wenn mehrere Suchparameter vorhanden sind, und ich bin mir nicht sicher warum.Mod-Rewrite, das mehrere RewriteMap-Lookups nicht ausführt

// Desired mapping examples: 
http://www.host.com/search/small   => http://www.host.com/search?q=tall 
http://www.host.com/search/medium/brown => http://www.host.com/search?q=grande,chocolate 

// Rule 
RewriteMap searchMap txt:/opt/etc/apache/conf/searchMap.txt 

// 1 Search Parameter 
RewriteCond ${searchMap:$1|$1} ([^/]*) 
RewriteRule "/search/(([^/]*))$" "http://%{HTTP_HOST}/search?q=%1" [NC,R,L] 

// 2 Search Parameter 
RewriteCond ${searchMap:$1|$1} ([^/]*)/([^/]*) 
RewriteRule "/search/(([^/]*)/([^/]*))$" "http://%{HTTP_HOST}/search?q=%1,%2" [NC,R,L] 

// 3 Search Parameter 
RewriteCond ${searchMap:$1|$1} ([^/]*)/([^/]*)/([^/]*) 
RewriteRule "/search/(([^/]*)/([^/]*)/([^/]*))$" "http://%{HTTP_HOST}/search?q=%1,%2,%3" [NC,R,L] 

// searchMap.txt 
small tall 
medium grande 
low-fat healthy 
low-calorie healthy 
brown chocolate 
pink strawberry 

Ausgang:

http://www.host.com/search/small   => http://www.host.com/search?q=tall 
http://www.host.com/search/small/brown => http://www.host.com/search?q=small,brown 

Meine erste Ausgabe korrekt abgebildet wird, aber meine zweite ist nicht. Apache hat keine Zuordnung durchgeführt. Irgendein Grund, warum das passiert?

Antwort

0

Lösung ist das Mapping-Lookup in der Rewrite-Regel zu setzen:

RewriteMap searchMap txt:/opt/etc/apache/conf/searchMap.txt 
RewriteRule "/search/(([^/]*))$" "http://%{HTTP_HOST}/search?q=${searchMap:$1|$1}" [NC,R,L] 
RewriteRule "/search/(([^/]*)/([^/]*))$" "http://%{HTTP_HOST}/search?q=${searchMap:$1|$1},${searchMap:$2|$2}" [NC,R,L] 
Verwandte Themen