我有这样的网址
img/(thumb)?/([size])?/file.jpg
我希望将其重写为:
cache/file_thumb_[size].jpg
因为'size'和'thumb'部分是optinal,所以没有这些部分的url最后应该没有下划线。
有没有办法在一个规则中重写此内容?如果有办法在back-reference-variable中添加一个underscore_character,我可以解决这个问题。
RewriteRule ^img/((thumb)\/)?(([a-z]+)\/)?([-_0-9a-zA-Z]+).([a-z]{3})$ cache/$5_$2_$4.$6
答案 0 :(得分: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