Ответ 1
Кроме EBNF или ABNF, квантификатор в регулярных выражениях относится к предыдущему выражению, а не к следующему выражению. Итак:
RewriteRule ^foo/bar/?$ http://url.com/tacos
Я пытаюсь перенаправить серию статических URL-адресов, и я хочу, чтобы он работал независимо от того, присутствует ли конечная косая черта:
/foo/bar ---> /tacos
/foo/bar/ --> /tacos
Я пробовал следующее и всевозможные варианты, но всегда получаю совпадение только с присутствующей задней чертой:
RewriteRule ^foo/bar?/$ http://url.com/tacos
RewriteRule ^foo/bar(?/)$ http://url.com/tacos
RewriteRule ^foo/bar*/$ http://url.com/tacos
RewriteRule ^foo/bar(*/)$ http://url.com/tacos
Я чувствую, что мне не хватает чего-то очевидного. Помощь?
Кроме EBNF или ABNF, квантификатор в регулярных выражениях относится к предыдущему выражению, а не к следующему выражению. Итак:
RewriteRule ^foo/bar/?$ http://url.com/tacos
Если вы хотите совместить foo/bar независимо от того, следует ли ему следующая часть пути, вы можете сказать:
RewriteRule ^foo/bar(/.*|$) http://url.com/tacos
Это будет соответствовать любому из следующих элементов:
foo/bar
foo/bar/
foo/bar/baz
Это означает: совпадение: a) слэш, за которым следуют 0 или более символов, или b) конец строки.
С другой стороны, это может быть нежелательно:
RewriteRule ^foo/bar/? http://url.com/tacos # This also matches foo/barb
RewriteRule ^foo/bar/?$ http://url.com/tacos # This will not match foo/bar/baz
Try
RewriteRule ^foo/bar/?$ http://url.com/tacos