Mod-Rewrite

Apache RewriteCond:將字元串注入正則表達式匹配組之間的 URI

  • February 11, 2014

編輯 這有效,需要使用 % 代替 $ 擷取組:

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 is empty, $ 1 匹配整個 URI。

基本上最終發生的是請求/foo/2被重寫為/foo/2/20121101,而我需要發生的是/foo/20121101/2

所以,鑑於 $ 1 matches the entire URI, how can I get it to match only foo|bar|baz, leaving $ 2 作為 URI 餘數,然後我可以將其夾在日期中?

另外,這是一種非常低效的方法嗎?Apache 文件通常表示連結

$$ OR $$s 所以不確定直接正則表達式是否是要走的路(當然更簡潔)。在 Apache 2.4 上,因此希望真正受益於速度增強(而不是在腳下射擊自己) 謝謝

如果我理解你做對了,我可能不會,我會說它可以更簡單:

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

引用自:https://serverfault.com/questions/383170