2010-05-10 29 views
5

Estoy usando un script PHP que genera dinámicamente PNG transparentes para usar como fondos CSS a partir de una cadena de consulta que toma los valores RGBa y HSLa. La secuencia de comandos original se puede encontrar here, solo he agregado soporte HSLa.Mod_rewrite con múltiples variables

Como las URL de fondo con cadenas de consulta de PHP no son muy bonitas, y como parece romper el IE6 PNG transparente hack, pensé en usar mod_rewrite para permitir que se llamara al script cuando se utiliza un .png con esta sintaxis denominado:

/assets/colors/h[0-360 value]_s[0-100 value]_l[0-100 value]_a[0-100 value].png 

que ser reescrito para:

/assets/colors.php?h=[0-360 value]&s=[0-100 value]&l=[0-100 value]&a=[0-100 value] 

he aquí los temas que estoy encontrando:

  • pasar múltiples variables con mod_rewrite
  • usando un guión como delimitador

Sé que esto podría hacerse pasando una sola variable y luego explotar en el script PHP, sin embargo, yo preferiría que se haga por Apache.

Gracias de antemano y si alguien quiere mi versión del script habilitada para HSLa, solo pregunte. De todos modos, te recomiendo que lo consultes en su sitio web.

Respuesta

3

mod_rewrite coincidirá las cosas entre llaves(), y luego puede referirse a éstas como $ 1, $ 2, etc. en el orden en que se emparejaron. Entonces puede usar esto para extraer múltiples variables simplemente colocándolas dentro de llaves.

Así que algo como esto va a funcionar para usted,

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}) corresponde a ninguno de 1, 2 ó 3 de los números 0-9 en una fila. Entonces "3", "10" y "100", etc. Pero también coincidiría con "999", por lo que deberá asegurarse de que el archivo colors.php verifique que los valores estén dentro de los rangos esperados, etc.

+0

¡Gracias! Funciona de maravilla. Entiendo la necesidad de verificar que las variables estén en el rango correcto, pero dado que no estoy exponiendo el script a la entrada del usuario, puedo prescindir de eso. – Andrei

0

Prueba esto:

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] 

tuve que ChangeUP mi nombre script para hacer este trabajo. Como tengo Options MultiViews,/assets/colors/siempre se maneja con colors.php independientemente de la configuración de mod_rewrite.

+0

Gracias ! ¿Por qué estás sugiriendo usar la bandera [QSA]? – Andrei

+0

QSA es "apéndice de cadena de consulta", por lo que si decide compilar parámetros de cadena de consulta adicionales como 'h100_s100_l100_a100.png? V = 1', la porción' v = 1' se agregará al resto de la cadena de consulta integrada la URL de destino Normalmente lo agrego por costumbre. –

Cuestiones relacionadas