Eu sugeriria substituir progressivamente os campos. Algo ao longo das linhas de:
(não testado)
# Rewrite imgcpu?src= thumbnail maker to nice static urls
RewriteCond %{REQUEST_URI} ^IMG.*$
RewriteRule ^IMG-(.+)_w([^_]+)(_.*)$ imgcpu\?src=$1\.jpg&w=$2$3 [C]
RewriteRule ^(imgcpu[^_]*)_h([^_]+)(_.*)$ $1&h=$2$3 [C]
RewriteRule ^(imgcpu[^_]*)_q([^_]+)(_.*)$ $1&q=$2$3
e assim por diante, até que todos os campos sejam convertidos um a um, em vez de tentar todos de uma só vez. Cada regra será aplicada sucessivamente. Isso deve funcionar para campos em qualquer ordem e permitir que eles sejam opcionais.
Deixe o [C]
da última desta cadeia de regras.
Editar:
É mais provável que isso funcione do que qualquer bobagem que publiquei até agora:
# Rewrite imgcpu?src= thumbnail maker to nice static urls
RewriteCond %{REQUEST_URI} ^IMG.*$
RewriteRule ^IMG-(.+\/photo_[^_]+)(_.*)*(\.[^.]+)$ imgcpu\?src=$1$3$2/ [C]
RewriteRule ^(imgcpu.*\..+)_w([^_]+)(_.*)*$ $1&w=$2$3 [C]
RewriteRule ^(imgcpu.*\..+)_h([^_]+)(_.*)*$ $1&h=$2$3 [C]
RewriteRule ^(imgcpu.*\..+)_q([^_]+)(_.*)*$ $1&q=$2$3 [C]
RewriteRule ^(imgcpu.*\..+)_c([^_]+)(_.*)*$ $1&c=$2$3 [C]
RewriteRule ^(imgcpu.*\..+)_m([^_]+)(_.*)*$ $1&m=$2$3 [C]
RewriteRule ^(imgcpu.*\..+)_f([^_]+)(_.*)*$ $1&f=$2$3 [C]
As principais tentativas de aprimoramento envolvem o asterisco antes do primeiro sinal de dólar, que tem a intenção de fazer as coisas funcionarem, se o campo que está sendo reescrito for o último da string de consulta e alterar o primeiro [^_]*
to .*
. Repare como eu deixei de mencionar o maior estratagema até o fim - esperando que não fosse notado? Espere o que? Observe que está tentando passar despercebido? Falando em não notar ... Eu só notei que os nomes dos arquivos incluem sublinhados!
Editar: Tempo real de tempo real - por fim!
Editar:
Tente isso no lugar do primeiro RewriteRule
(todas as outras linhas permanecem as mesmas).
RewriteRule ^IMG-(.+\/.*?)(_[hw]\d+)([^.]*)(\.[^.]+)$/imgcpu\?src=$1$4$2$3/ [C]
Isso depende do campo de altura ou largura ser o primeiro entre os campos. Você pode adicionar mais letras em [hw]
. Note, no entanto, que um nome de arquivo como o "/IMG-pasta/santa_claus_w2_elves_w200_h100_q75.jpg" forjado (/ Papai Noel w / 2 elfos) não daria resultados corretos.
Editar (15 de dezembro):
RewriteCond %{QUERY_STRING} ^(.*\.[^_]*)_(.)([^_]*)(_.*)?$
RewriteRule ^/imgcpu /imgcpu?%1&%2=%3%4 [N]
RewriteCond %{REQUEST_URI} ^/IMG.*$
RewriteRule ^/IMG-(.+/.*?)(_[hw]\d+)([^.]*)(\.[^.]+)$ /imgcpu?src=$1$4$2$3 [N]