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]