1

このようなURLがあります

img/(thumb)?/([size])?/file.jpg

そして、これを次のように書き直します。

cache/file_thumb_[size].jpg

「サイズ」部分と「親指」部分はオプションであるため、これらの部分のない URL の末尾にはアンダースコアを付けないでください。

これを1つのルールで書き直す方法はありますか? 後方参照変数にアンダースコア文字を追加する方法があれば、問題を解決できます。

RewriteRule ^img/((thumb)\/)?(([a-z]+)\/)?([-_0-9a-zA-Z]+).([a-z]{3})$ cache/$5_$2_$4.$6
4

1 に答える 1

2

いいえ、_関連付けられた後方参照が利用可能な場合にのみ含めることはできません。置換文字列は、if else include 操作の条件として考えられるものを許可しません。

ただし、次のようにルールを連鎖させることで同じ効果を得ることができます。

RewriteRule ^img/(?:(thumb)/)?(?:([a-z]+)/)?(\w+)\.([a-z]{3})$ cache/$3_$1_$2.$4 [C]
RewriteRule ^(.*?)__(.*)$ $1_$2 [C]
RewriteRule ^(.*?)_\.(.*)$ $1.$2 [L]

ファイル名の置換がどのように行われるかは次のとおりです

http://domain.com/img/thumb/small/file.jpg
 > Rule 1 > http://domain.com/cache/file_thumb_small.jpg

http://domain.com/img/thumb/file.jpg
 > Rule 1 > http://domain.com/cache/file_thumb_.jpg
  > Rule 3 > http://domain.com/cache/file_thumb.jpg

http://domain.com/img/small/file.jpg
 > Rule 1 > http://domain.com/cache/file__small.jpg
  > Rule 2 > http://domain.com/cache/file_small.jpg

http://domain.com/img/file.jpg
 > Rule 1 > http://domain.com/cache/file__.jpg
  > Rule 2 > http://domain.com/cache/file_.jpg
   > Rule 3 > http://domain.com/cache/file.jpg
于 2013-09-10T13:52:40.927 に答える