Использование RewriteRule для сопоставления значения RewriteMap и игнорирования любых конечных косых черт и символов?

Я пытаюсь использовать RewriteMap в файле .conf виртуального хоста apache 2.4 для перенаправления ряда URL-адресов. Различные запросы могут относиться к одной записи на карте, и у меня возникают проблемы с сопоставлением этих вариантов в RewriteRule, особенно в конце косой черты. В настоящее время у меня есть что-то вроде:

RewriteRule "^/foo/(this|that|anotherthing)/bar/(.*)" "/${map:$2}"

это отлично работает, предоставляя

/for/that/bar/request
/for/this/bar/request

такую ​​же замену, но мне также нужно предоставить такую ​​же замену, когда путь имеет завершающую косую черту + любые дополнительные символы, то есть

/foo/this/bar/request/
/foo/this/bar/request/and/some/change

должны все вернуть такое же значение, основанное на совпадении по запросу. Я могу' t, похоже, прибивает правильное регулярное выражение для соответствия 0 или 1 / и любым дополнительным символам в конце строки. Это заставляет меня думать, что я неправильно понимаю важный фрагмент переписывания. Нужно ли мне использовать RewriteCond? Я надеялся, что что-то простое, например

RewriteRule "^/foo/(this|that|anotherthing)/bar/(.*)(\/.*?|)" "/${map:$2}"

, сработает, но пока не повезло.

0
задан 12 May 2016 в 15:51
1 ответ

Вы почти все. Попробуйте следующее:

RewriteRule "^ / foo / (this | that | anotherthing) / bar /(.+)(\/.+)?" "/ $ {map: $ 2}"

Я удалил трубу во второй группе захвата и переместил вопросительный знак наружу. Это делает всю группу захвата необязательной, и если она присутствует, то она должна начинаться с косой черты.

Я также изменил экземпляры . * на . + , поскольку вы, вероятно, хотите сопоставить хотя бы 1 символ.

Изменить:

Чтобы также сделать завершающую косую черту необязательной, просто добавьте \ /? в конец. Если вторая группа захвата пуста, на этой проверке косой черты не будет обнажения.

RewriteRule "^ / foo / (this | that | anotherthing) / bar /(.+)(\/.+)?\/ ? " "/ $ {карта:$ 2} "

0
ответ дан 24 November 2019 в 06:34

Теги

Похожие вопросы