2

我有一个可下载的文件,其文件名包含版本号,比如说 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)

4

2 回答 2

3

您可以用此行替换所有代码:

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:由于我们不能使用%RHS 上的变量RewriteCond作为反向引用,我在这里使用特殊的正则表达式反向引用\1变量RewriteCond

于 2013-08-19T15:14:07.733 回答
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 中的模式,但这应该会让您朝着正确的方向前进。

于 2013-08-19T15:04:08.327 回答