编辑 这是可行的,需要使用 % 代替 $ 作为捕获组:
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]