Ver Mensaje Individual
  #11 (permalink)  
Antiguo 21/02/2010, 13:51
DriverOp
 
Fecha de Ingreso: enero-2005
Mensajes: 2
Antigüedad: 19 años, 10 meses
Puntos: 1
Respuesta: RewriteRule y rutas relativas

Para solucionar el tema de las rutas hacia los archivos .css, .js e imágenes agrega esto después de "RewriteEngine On" y antes de cualquier RewriteRule

Código:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Eso hace que apache primero verifique si exite el archivo o el directorio solicitado, y si existe no sigue procesando.

Sin embargo esto no previene otro problema: las rutas relativas dentro de los .css, por ejemplo:

Código HTML:
background: url("imagenes/imagen.jpg") no-repeat;
El navegador tomará la ruta virtual creada con el .htaccess, por ejemplo si la página se cargó como

Código:
http://www.example.com/path/amigable/
Querrá buscar esa imagen en:

Código:
http://www.example.com/path/amigable/imagenes/imagen.jpg
Cuando en realidad debería ser:

Código:
http://www.example.com/imagenes/imagen.jpg
En algunos casos bastaría con agregar una / por delante de la url relativa indicándole al navegador que enlace desde el home del dominio, pero en caso que tengas tu url amigable apuntando a un directorio dentro del home no funcionará. O sea, en el CSS pones:

Código HTML:
background: url("/imagenes/imagen.jpg") no-repeat;
Y el navegador buscará en:

Código:
http://www.example.com/imagenes/imagen.jpg
Lo que es correcto, pero si tu página está en el path absoluto:

Código:
http://www.example.com/paginas/pagina.htm
Y tienes tus imágenes en:

Código:
http://www.example.com/paginas/imagenes/
El navegador querrá buscar la imagen en:

Código:
http://www.example.com/imagenes/imagen.jpg
Lo que sería erróneo.

Para solucionar esto sería necesario poner path absolutos en las URLs dentro de los CSS:

Código HTML:
background: url("http://www.example.com/paginas/imagenes/imagen.jpg") no-repeat;
Entonces el navegador buscará exactamente eso (y con el agregado al .htaccess que puse más arriba lo encontrará).

Esto puede no ser aplicable en todos los casos. En el peor de los casos el sitio no puede moverse del dominio en el que está. Hay una solución definitiva para estos problemas pero implica programar en PHP cosa que no siempre es posible.

Estos fueron mis 5 centavos de aporte