使用Apache是否可以对服务器变量的派生进行重写?

使用Apache是否可以对服务器变量的派生进行重写?,apache,mod-rewrite,Apache,Mod Rewrite,我想进行以下重写: 如果文件名为/files/styles/*/*/*.*且文件/files/*.*.不存在,则重写到另一个域 使用PERL正则表达式执行此操作的方法如下: s/\/files(\/styles\/[^\/]+?/[^\/]+?)(\/.*)$/\/files$2/ 使用Apache mod_rewrite是否可以做到这一点。类似于 RewriteCond %{REQUEST_FILENAME} ^files/styles.*$ RewriteCond [derivative

我想进行以下重写:

如果文件名为
/files/styles/*/*/*.*
且文件
/files/*.*.
不存在,则重写到另一个域

使用PERL正则表达式执行此操作的方法如下:

s/\/files(\/styles\/[^\/]+?/[^\/]+?)(\/.*)$/\/files$2/
使用Apache mod_rewrite是否可以做到这一点。类似于

RewriteCond %{REQUEST_FILENAME} ^files/styles.*$
RewriteCond [derivative of %{REQUEST_FILENAME}] !-f 
RewriteRule (.*)$ http://example.com/$1 [R=301,L]

您可以使用
%1
获取上一次重写的反向引用。您可以尝试以下方法:

# Is the request */files/styles/*/*/*.* 
# Set a backreference which will be the docroot (*)/files....
# Set a backreference which will be the filename (*.*).
RewriteCond %{REQUEST_FILENAME} ^(.*)/files/styles/[^/]+/[^/]+/(.+)$
# Check to see if backreference exists.
RewriteCond %1/files/%2 !-f
# Redirect.
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]