Назад | Перейти на главную страницу

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 в надежде получить выгоду от увеличения скорости (вместо стрельбы себе в ногу)

Спасибо

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

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