mod_rewrite:在 RewriteCond 中访问 URL 路径

mod_rewrite:在 RewriteCond 中访问 URL 路径

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"

如果你可以使用后备资源会让上面的内容更清晰一些。

相关内容