Вы сказали, что хотите разрешить только значения, найденные на карте. Это невозможно, если вы не укажете дополнительное ограничение в регулярном выражении для группы захвата. Там нет никакого способа сделать это с самой картой. Насколько мне известно, нет синтаксиса map.keys, который вы можете применить в левой части шаблона.
НО
Вы можете указать значение по умолчанию, если захваченное значение не найдено. Таким образом:
## all on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
/blah.php?subsection=${legacy:$1|defaultValue}&title=$2
Замените "defaultValue" на что угодно. Например, 0 (ноль) или «notfound», если данный аргумент не найден на карте.
Затем вы можете либо переписать результат этого с другим правилом, либо просто пропустить его и предоставить сообщение «404» по URL-адресу со значением по умолчанию.
Если вы решите использовать другое правило, оно будет выглядеть так:
## all on one line
RewriteRule ^/section/downloads/([a-zA-Z-]+)/(.*)$
/blah.php?subsection=${legacy:$1|notFoundMarker}&title=$2
## This rule fires if the lookupKey was not found in the map in the prior rule.
RewriteRule ^/blah.php?subsection=notFoundMarker /404.php [L]