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 の場合、最後の書き換えルールはそれ自体にリダイレクトされます)。

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 に答える