我有一个可下载的文件,文件名包含一个版本号,比如download-3-0.dat,将是当前版本。
我想将以前版本的文件的外部引用重定向到当前版本,以便download-2-5.dat将重定向到download-3-0.dat
这似乎是部分解决方案:
RewriteRule .* - [E=CURRENT:3-0]
RewriteRule ^download(.*).dat$ http://site.com/download-%[ENV:CURRENT].dat [L, R=301]
但问题是,如何在当前版本中添加一个异常,使其不会进入递归循环(如果请求的文件是download-3-0.dat,则最后一个重写规则将重定向到其ef)
您可以用以下行替换所有代码:
RewriteRule ^download-(?!3-0.dat$) /download-3-0.dat [L,R=301,NC]
编辑:根据您的以下评论:-
嗯,这比我一开始预想的要棘手得多
试试这个代码:
# set your current version here
SetEnvIf Request_URI "^" CURRENT=3-0
RewriteCond %{ENV:CURRENT}:%{REQUEST_URI} !^([^:]+):/download-1.dat$ [NC]
RewriteRule ^download-[^.]+.dat$ /download-%{ENV:CURRENT}.dat [L,R=301,NC]
PS:由于我们不能在RewriteCond
的RHS上使用%
变量作为反向引用,因此我在RewriteCond
中使用特殊的正则表达式反向引用变量1
。
我认为您只需要一个RewriteCond来确认它不是当前版本:
RewriteRule .* - [E=CURRENT:3-0]
RewriteCond %{REQUEST_URI} !^download-3-0.dat
RewriteRule ^download(.*).dat$ http://site.com/download-%{ENV:CURRENT}.dat [L, R=301]
您可能需要调整RewriteCond中的模式,但这应该会让您朝着正确的方向前进。