htaccess rewrite rompe caminos relativos

Tengo un archivo htaccess que mapas

  http://www.myserver.com/home/ 

a

  http://www.myserver.com/index.php?section=home 

Esta parte funciona bien. El problema al que me enfrento ahora es que todas mis imágenes y css residen en una subcarpeta denominada assets, es decir,

  http://www.myserver.com/assets/images/ 
  http://www.myserver.com/assets/css/ 

etc.

Después de la redirección, el navegador buscará los archivos en

  http://www.myserver.com/home/assets/images/ 

que hace que las cosas se rompan, ya que esta no es una ruta válida.

He podido agregar otra reescritura que mapea lo anterior a la subcarpeta correcta, sin embargo, Firebug muestra que las imágenes residen en:

  http://www.myserver.com/home/assets/images/ 

Sé que no es realmente un problema, después de todo, mis imágenes y CSS están cargando bien con esta regla. Solo tengo curiosidad sobre cómo podría hacer que la ruta que se muestra sea la ruta real, que es:

  http://www.myserver.com/assets/images/ 

Pegando mi archivo htaccess a continuación. Muchas gracias de antemano.

Options +FollowSymlinks RewriteEngine on RewriteRule ^([^/]+)/assets/(css|images|js)/(.*)$ /assets/$2/$3 [NC,L] RewriteRule ^([^/]+)/$ /index.php?section=$1 [NC,L] 

El problema es que no considera que las URL relativas se resuelven en el URI base que es el URI del documento HTML en el que se utiliza la referencia. Entonces, una ruta URI relativa como assets/images/ en un documento HTML con la ruta URI /home/ se resuelve en /home/assets/images/ lugar de /assets/images/ .

No puede cambiar esto con mod_rewrite ya que la resolución URI la realiza el cliente y no el servidor. Las únicas soluciones son:

  • cambie el URI base utilizando el elemento BASE (tenga en cuenta que esto afecta a todos los URI relativos);
  • utilizando rutas URI absolutas, p. ej. /assets/images/ lugar de un assets/images/ relativo;
  • ajustando la ruta relativa de URI, por lo que las referencias en /home/ se ajustan a ../assets/images/ para reflejar la profundidad de la ruta.

Agregue esta línea a su página dentro de la etiqueta la siguiente manera:

  Your site title  ....