RewriteCond
我如何才能匹配中的 URL 路径.htaccess
?
我喜欢这个,因为我正在尝试让我的 Web 服务器的一个子目录透明地代理 + 缓存请求到另一台服务器,并且我想这样写.htaccess
:
RewriteCond "%{ENV:CACHE_BASE}/%{URL_PATH}" -f
RewriteRule (.*) "%{ENV:CACHE_BASE}/$1" [L]
RewriteRule (.*) "download_and_cache.cgi?$1"
这样,对缓存中已存在的文件的请求将从 Apache 内部发送,而对缓存中不存在的文件的请求将由脚本处理download_and_cache.cgi
(脚本会将它们放入缓存中)。
注意:我不能使用%(REQUEST_URI}
,因为如果.htaccess
位于/foo/
,则对的请求/foo/README.txt
将导致对的缓存检查$CACHE_BASE/foo/README.txt
,而不是$CACHE_BASE/README.txt
应该的情况。
答案1
我的 Mod_rewrite 有点生疏,但你不应该能够使用重写库用于解释“/foo”的指令
或者我觉得你可以使用类似这样的反向引用
RewriteCond %{REQUEST_URI} foo/(.*)
RewriteCond "%{ENV:CACHE_BASE}/%1" -f
或者,如果我没记错的话,首先重写到缓存中,然后检查是否需要先下载。就像这样:
RewriteRule foo/(.*) "%{ENV:CACHE_BASE}/$1" [L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.*) "download_and_cache.cgi?$1"
如果你可以使用后备资源会让上面的内容更清晰一些。