РЕДАКТИРОВАТЬ Это работает, необходимо использовать% вместо $ для групп захвата:
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 в надежде получить выгоду от увеличения скорости (вместо стрельбы себе в ногу)
Спасибо
Если я понимаю, что вы делаете правильно, а я могу этого не делать, я бы сказал, что это может быть проще:
RewriteCond %{REQUEST_URI} !/\d{8}(/|$)
RewriteRule ^/(foo|bar|baz)(/?.*)$ http://localhost:8081/$1/%{TIME_YEAR}1101$2 [P]