1

我有一个这样的网址

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

我想将其重写为:

cache/file_thumb_[size].jpg

因为“大小”和“拇指”部分是可选的,所以没有这些部分的网址末尾不应有下划线。

有没有办法在一个规则中重写它?如果有办法将下划线字符添加到反向引用变量,我可以解决这个问题。

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 回答