Mod_rewrite com várias variáveis
-
25-09-2019 - |
Pergunta
Eu estou usando um script PHP que gera dinamicamente PNGs transparentes para usar como CSS fundos a partir de uma seqüência de caracteres de consulta que leva RGBa e HSLa valores.O script original pode ser encontrado aqui, Eu só adicionados HSLa de suporte.
Porque o plano de fundo URLs com PHP cadeias de caracteres de consulta não é muito bonita, e porque parece quebrar o IE 6 PNG transparente hack, eu pensei que o uso do mod_rewrite para permitir que o script para ser chamado quando uma .png com esta sintaxe é chamado de :
/assets/colors/h[0-360 value]_s[0-100 value]_l[0-100 value]_a[0-100 value].png
o que poderia ser reescrito para :
/assets/colors.php?h=[0-360 value]&s=[0-100 value]&l=[0-100 value]&a=[0-100 value]
Veja aqui os problemas que eu estou encontrando :
- passar várias variáveis com o mod_rewrite
- usando um carácter de sublinhado como um delimitador
Eu sei que isso pode ser feito, passando de uma única variável e, em seguida, explodir-lo no script PHP, no entanto eu preferiria ser feita pelo Apache.
Obrigado antecipadamente e se alguém quiser minha HSLa habilitado versão do script é só pedir.De qualquer maneira, eu recomendo que você confira no site do autor.
Solução
mod_rewrite irá corresponder as coisas em chaves () e, em seguida, você pode referir-se a estes como $1, $2, etc., na ordem em que foram correspondidas.Assim você pode usar para extrair várias variáveis por apenas colocando-os dentro de chavetas.
Então algo como isto irá funcionar para você,
RewriteRule ^assets/colors/h([0-9]{1,3})_s([0-9]{1,3})_l([0-9]{1,3})_a([0-9]{1,3}).png assets/colors.php?h=$1&s=$2&l=$3&a=$4
([0-9]{1,3})
irá corresponder a 1, 2 ou 3 dos números de 0 a 9 em uma linha.Assim, "3", "10" e "100", etc.Mas também teria de corresponder "999", de modo que você precisará certifique-se de que o colors.php arquivo verifica os valores estão dentro dos limites previstos, etc.
Outras dicas
Tente isso:
RewriteEngine on
RewriteRule /assets/colors/h([0-9]+)_s([0-9]+)_l([0-9]+)_a([0-9]+).png /assets/col.php?h=$1&s=$2&l=$3&a=$4 [QSA,L]
Eu tinha que changeup meu nome do script para fazer este trabalho.Porque eu tenho Options MultiViews
, /assets/cores/ é sempre tratadas pelo colors.php independentemente do mod_rewrite de configuração.