I've got a RewriteMap
that looks like this:
Guide 1
Mini-Guide 2
White Paper 3
and I'm including it into Apache
via
RewriteMap legacy txt:/var/www/site/var/rewrite_map.txt
I want to create a RewriteRule
that will allow only values from the left side of said RewriteMap
to be in this position;
RewriteRule ^/section/downloads/(${legacy})/(.*)$ /blah.php?subsection=${legacy:%1}&title=$2
I know I can use ${legacy}
on the right side, but can I use it on the left, and if so, how?
In your map file, the left side is the key and the right side is the value. When you create a rule for matching against a map, you input the key and it outputs the value.
Change your RewriteRule to this:
The first grouping captures the string in the incoming URL. The $1 in the replacement applies it to the named map. To make a default value, change
${legacy:$1}
to${legacy:$1|Unknown}
.Finally, if you only want the rule to work on values that are in the map file, add a
RewriteCond
:The condition says if the map does not return the default value (
Unknown
), then run the next rule. Otherwise, skip the rule and move on.Apache RewriteMap