mod_rewrite:访问RewriteCond中的URLpath

.htaccess如何匹配来自RewriteCond的URLpath?

我想这样做,因为我试图让我的Web服务器的一个子目录透明地代理+caching请求到另一台服务器,我想写这样的.htaccess

 RewriteCond "%{ENV:CACHE_BASE}/%{URL_PATH}" -f RewriteRule (.*) "%{ENV:CACHE_BASE}/$1" [L] RewriteRule (.*) "download_and_cache.cgi?$1" 

因此,caching中已经存在的文件的请求将从Apache内部发送,并且对不在caching中的文件的请求将由download_and_cache.cgi脚本处理(这将把它们放入caching中)。

注意:我不能使用%(REQUEST_URI} ,因为如果.htaccess位于/foo/ ,请求/foo/README.txt将导致caching检查$CACHE_BASE/foo/README.txt ,而不是$CACHE_BASE/README.txt因为它应该。

我的Mod_rewrite是有点生疏,但不应该能够使用RewriteBase指令来说明“/富”

或者我认为你可以使用这样的后退引用

 RewriteCond %{REQUEST_URI} foo/(.*) RewriteCond "%{ENV:CACHE_BASE}/%1" -f 

或者,如果我正确地按照以下步骤重新写入caching,然后检查是否需要先下载它。 像这样:

 RewriteRule foo/(.*) "%{ENV:CACHE_BASE}/$1" [L] RewriteCond %{REQUEST_FILENAME} -f RewriteRule (.*) "download_and_cache.cgi?$1" 

如果你可以使用FallbackResource会使上面的一点清洁。