Apache RewriteCond: вставить строку в URI между группами соответствия регулярному выражению

РЕДАКТИРОВАТЬ Это работает, необходимо использовать% вместо $ для групп захвата:

RewriteRule (.*) http://localhost:8081/%1/%{TIME_YEAR}1101%2 [P]

Трудно разобраться с этим.

Нужна строка даты, условно внедренная в определенные URI (для прокси-сервера на сервере приложений Jetty), при условии, что если строка даты из 8 цифр уже отсутствует, введите ее.

Взлом, который я придумал:

RewriteCond %{REQUEST_URI} ^/(foo|bar|baz)(.*)
RewriteCond %2 !/(\d{8})(.*)
RewriteRule (.*) http://localhost:8081$1/%{TIME_YEAR}1101$2 [P]

Это работает в некоторой степени, но не все в том, что $2 пусто, $1 соответствует всему URI.

В основном то, что в итоге происходит, является запросом на /foo/2 переписывается /foo/2/20121101в то время как то, что мне нужно, это /foo/20121101/2

Итак, учитывая, что $ 1 соответствует всему URI, как я могу сделать так, чтобы он совпадал только с foo|bar|baz, оставив $2 в качестве остатка URI, с которым я могу затем вставить сэндвич в дату?

Кроме того, это ужасно неэффективный подход? Документы Apache, как правило, указывают на цепочку [OR], поэтому не уверены, что прямое регулярное выражение является подходящим способом (конечно, более кратким). На Apache 2.4 так надеемся выиграть от повышения скорости (против стрельбы в ногу)

Спасибо

1 ответ

Решение

Если я понимаю, что вы делаете правильно, а я нет, я бы сказал, что это может быть проще:

RewriteCond %{REQUEST_URI} !/\d{8}(/|$)
RewriteRule ^/(foo|bar|baz)(/?.*)$ http://localhost:8081/$1/%{TIME_YEAR}1101$2 [P]
Другие вопросы по тегам