[Php-avanzado] Problema con CSS dinamico
Matias Gea
matigea en gmail.com
Jue Dic 31 10:48:03 ARST 2009
Una configuración válida para el .htacces puede ser esta:
<FilesMatch "\.(css|css2)$">
SetHandler application/x-httpd-php5
</FilesMatch>
El problema de tu expresion regular ( "^.*?*.css?$" ) está en el
segundo asterisco. Lo que la expresion "quiere" hacer es buscar
cualquier cantidad de caracteres y despues la extension .css al final
del archivo. Basicamente:
^ --> es el principio de la cadena
.*? --> el punto significa cualquier caracter (sea numero, letra o
simbolo), el * significa que puede ser cualquier cantidad (0 o más) y
el ? (en este caso) significa que el * funciona en modo no-codicioso
(ungreedy). Si queres más explicacion de esto avisame.
despues viene el error:
*. --> no tiene sentido en la expresion regular, esto debería ser así:
\. --> dijimos que el . significa cualquier caracter, pero la barra de
escape hace que se convierta en un punto literal, entonces esta parte
busca un punto.
css? --> busca la cadena cs con otra s opcional (el ?, en este caso,
hace que se busque el caracter s 0 o 1 veces), lo cual no tiene
sentido. tendría más sentido si agregamos un 2:
css2? --> busca una cadena css o css2
$ --> indica el final de la cadena
Entonces, la expresion correcta seria:
<FilesMatch "^.*?\.css2?$">
esto busca un nombre de archivo que empiece por cualquier caracter (y
tenga cualquier cantidad de caracteres) y termine con .css o .css2.
Igualmente tiene un par de fallas, por ejemplo, el archivo
estilos.css.css no valida en esa regex con modo greedy (como es por
defecto en la mayoria de los casos). La mejor es la que te pasó Leo:
"\.(css|css2)$" o "\.css2?$" (son lo mismo pero escrito de otras formas)
También podes seguir agregando extensiones para que las tome como
scripts php, por ejemplo:
"\.(css|css2|jpg|png|rss)$" o "\.(css2?|jpg|png|rss)$"
Lo que decia Lucas también es valido, pero te limita a poner una linea
en el .htaccess cada vez que queres agregar un archivo css distinto.
Una opcion puede ser (el RewriteBase no hace falta):
RewriteEngine on
RewriteRule ^(.*)\.css$ $1.php
Aquí, cuando escribas en la barra de url (o llames por un link o hagas
referencia a) http://dominio.com/estilos.css, en realidad apachae va a
ir a buscar el archivo http://dominio.com/estilos.php, es decir, el
archivo estilos.css no existe, solo existe el archivo estilos.php.
Igualmente, la forma más simple (y la que uso más frecuentemente) es
poner directamente el archivo php como hoja de estilo:
<link rel="stylesheet" href="estilos.php" media="screen" />
y a estilos.php le agrego al principio: header("Content-type: text/css");
Salu2 y felicidades!
El día 31 de diciembre de 2009 01:59, NeiKeR <neiker en gmail.com> escribió:
> Entonces creo que no es conveniente usarlo no? Ya que quisiera usarlo
> tendria que agregar el handler en cada apache en que utilice ese
> htaccess....
> Muchas gracias por la respuesta! Feliz año!
>
> Saludos!
>
> El 30 de diciembre de 2009 18:55, Leonardo Tadei - Pegasus Tech Supply
> <leonardot en pegasusnet.com.ar> escribió:
>>
>> Hola Javier,
>>
>> para que eso funcione con esa sintaxis, tenés que tener un handler
>> existente en Apache que defina "php5-script".
>> Si en tu configuración se llama distinto, no funcionará.
>>
>> Respecto a la expresión regular, me suena mejor así:
>>
>> <FilesMatch "\.(css|css2)$">
>>
>>
>> Saludos!
>>
>> El mié, 30-12-2009 a las 18:29 -0300, NeiKeR escribió:
>> > Buenas..
>> > Estuve viendo como incluir php en un css sin usar un archivo .php y
>> > encontré que se podia agregar al htaccess una regla para que se
>> > procesen los CSS con PHP.. así que creé un .htaccess en el directorio
>> > de estilos con este contenido:
>> > <FilesMatch "^.*?*.css?$">
>> > SetHandler php5-script
>> > </FilesMatch>
>> >
>> > Pero me da error y en los logs me tira esto:
>> > [Wed Dec 30 18:08:26 2009] [alert] [client
>> > 127.0.0.1] /var/www/styles/.htaccess: Regex could not be compiled
>> >
>> > Me parece que el error está en la expresión regular del FileMarch,
>> > pero no me doy cuenta de cual es mi error..
>> >
>> > Saludos!
>> >
>> > --
>> > Javier Alejandro Alvarez
>> >
>> > _______________________________________________
>> > Php-avanzado mailing list
>> > Php-avanzado en pato2.fi.mdp.edu.ar
>> > http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>> --
>>
>> Leonardo Tadei
>> leonardot en pegasusnet.com.ar
>> http://blog.pegasusnet.com.ar
>> Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
>>
>> _______________________________________________
>> Php-avanzado mailing list
>> Php-avanzado en pato2.fi.mdp.edu.ar
>> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
>
>
> --
> Javier Alejandro Alvarez
>
>
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
--
Matias Fernando Gea
matigea en gmail.com
http://www.mfgea.com.ar
Más información sobre la lista de distribución Php-avanzado