transicion texto para mostrar imagenes imagen efectos efecto centrar botones css .htaccess mod-rewrite image subdomain

texto - el sitio 5 veces más rápido a través de mod_rewrite, pero las imágenes CSS están rotas



mostrar texto hover css (2)

Estoy usando .htaccess para acelerar un sitio con los siguientes redireccionamientos:

request for http://example.com/images/name.jpg routed to http://i.example.com/name.jpg request for http://example.com/css/name.css routed to http://c.example.com/name.css

Al escuchar el podcast Stack Overflow, aprendí que esto podría hacer que un sitio sea más rápido, ya que el navegador puede descargar más archivos simultáneamente (aparentemente dos flujos por dominio, aunque esto no está confirmado).

De hecho, la diferencia es dramática; ¡la página carga aproximadamente cinco veces más rápido !

No he tocado las carpetas e imágenes originales: solo estoy usando mod_rewrite para cambiar las direcciones de example.com/images/ a i.example.com/ :

rewritecond %{HTTP_HOST} !^i/.example/.com [NC] rewriterule ^images/([^/]+)$ http://i.example.com/$1 [L] rewritecond %{HTTP_HOST} !^c/.example/.com [NC] rewriterule ^css/([^/]+)$ http://c.example.com/$1 [L]

El problema que tengo es que esta técnica funciona perfectamente para etiquetas de imagen incluidas en html, pero no funciona para imágenes incluidas a través de hojas de estilo:

img src = / images / logo.jpg funciona a la perfección

fondo: url (/images/logo.jpg); No funciona

El registro de errores del servidor contiene la siguiente entrada:

El archivo no existe: / var / www / html / css / images, referer: http://example.com/page.html

Esto parece implicar que la regla de reescritura se está aplicando incorrectamente.

Las hojas de estilo funcionan si uso:

fondo: url ( http://i.example.com/logo.jpg );

Sin embargo, para evitar reescribir todas las hojas de estilo, me gustaría saber: ¿por qué la reescritura de URL no se aplica a las hojas de estilo de la misma manera que a las etiquetas html img ?

[update1] Este problema existe en Safari 4 Beta, Firefox 3.0.3 y Chrome, pero la página funciona perfectamente en IE6 .

[actualización2] Agregar [L, R = 301] y [L, R = 302] no ayudó.

[update3] Intenté lo siguiente a partir de la sugerencia de Gumbo a continuación:

Redirigir externamente si la ruta no coincide con el nombre de host:

rewritecond %{HTTP_HOST} !^i/.domain/.com$ rewriterule ^images/([^/]+)$ http://i.domain.com/$1 [L,R=301] rewritecond %{HTTP_HOST} !^c/.domain/.com$ rewriterule ^css/([^/]+)$ http://c.domain.com/$1 [L,R=301]

Redirigir internamente; si hay un nombre innecesario de carpeta elimínelo (vea el error del servidor más arriba):

rewritecond %{HTTP_HOST} ^i/.domain/.com$ rewriterule ^images/([^/]+)$ $1 [L] rewritecond %{HTTP_HOST} ^c/.domain/.com$ rewriterule ^css/([^/]+)$ $1 [L]

Todavía no funcionó. Curiosamente, el error del servidor es:

El archivo no existe: / var / www / html / css / var, referer: http://domain.com/page.html


Encontré una manera de resolver este problema si todos los nombres de host usan el mismo host virtual:

# redirect externally if path doesn’t match host name RewriteCond %{HTTP_HOST} !^i/.example/.com$ RewriteRule ^images/([^/]+)$ http://i.example.com/$1 [L,R=301] RewriteCond %{HTTP_HOST} !^c/.example/.com$ RewriteRule ^css/([^/]+)$ http://c.example.com/$1 [L,R=301] # redirect internally to the file RewriteCond %{HTTP_HOST} ^i/.example/.com$ RewriteRule !^images/ images%{REQUEST_URI} [L] RewriteCond %{HTTP_HOST} ^c/.example/.com$ RewriteRule !^css/ css%{REQUEST_URI} [L]

Esto hará lo siguiente:

http://example.com/css/foo externally to http://c.example.com/foo http://c.example.com/foo internally to /css/foo http://example.com/images/bar externally to http://i.example.com/bar http://i.example.com/bar internally to /images/bar

Además de corregir rutas y nombres de host que no coinciden:

http://i.example.com/css/foo externally to http://c.example.com/foo http://c.example.com/images/bar externally to http://i.example.com/bar

Se produce un desajuste cuando la hoja de estilo solicitada http://example.com/css/foo se redirige a http://c.example.com/foo y se resuelve una referencia de URI de imagen como /images/bar dentro de la hoja de estilo desde esta nueva URI base y, por lo tanto, conduce a http://c.example.com/images/bar lugar de la http://example.com/images/bar inicial.


Pude resolver esto al no intentar incorporar directorios en los subdominios :

request for domain.com/images/ routed to i.domain.com/images/ request for domain.com/css/ routed to c.domain.com/css/

Funciona perfectamente y sigue siendo extremadamente rápido .

Parece que hay un error en los navegadores modernos en los que una solicitud CSS que se redirige aplicará solo el nuevo dominio , dejando los directorios originales como parte de la solicitud:

Si una imagen css en url (domain.com/images/name.jpg) se redirige a i.domain.com/name.jpg , el navegador solicitará i.domain.com/images/name.jpg por error.