2010-02-01 17 views
5

¿Cuáles son las reglas de mod_Rewrite para verificar múltiples ubicaciones de carpetas para un archivo determinado? Por ejemplo, si tengo una estructura de carpetas de:Cómo usar mod_Rewrite para verificar múltiples carpetas para un archivo estático

public/ 
    css/ 
    library1/ 
     css/ 
    library2/ 
     css/ 

y quiero peticiones a /css/somefile.css comprobar primero el directorio public/css/, a continuación, en cascada a public/library1/css/ continuación public/library2/css/, devolviendo un 404 si un activo no se puede encontrar en cualquiera de los directorios.

estaba pensando a lo largo de las líneas de:

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond library1%{REQUEST_URI} -f 
RewriteRule ^(.*)$ library1$1 [L] 

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond library2%{REQUEST_URI} -f 
RewriteRule ^(.*)$ library2$1 [L] 

Pero esto no parece funcionar - no estoy seguro de cómo comprobar la existencia del archivo en un camino generado dinámicamente.

Respuesta

6

Prueba estas reglas:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}/library1%{REQUEST_URI} -f 
RewriteRule ^css/.+ library1%{REQUEST_URI} [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}/library2%{REQUEST_URI} -f 
RewriteRule ^css/.+ library2%{REQUEST_URI} [L] 
+0

Saludos para que - Yo no lugar el% {DOCUMENT_ROOT} variable al leer los documentos. – DavidWinterbottom

+0

@DavidWinterbottom: necesita la ruta absoluta del sistema de archivos cuando desea probar archivos existentes, directorios, etc. * PETICIÓN \ _FILENAME * ya contiene la ruta absoluta del sistema de archivos pero * REQUEST \ _URI * solo la ruta URL absoluta. – Gumbo

+0

@Gumbo: ¿no debería la línea 6 referencia 'library2'? –

1

Posiblemente las variables del servidor no contengan lo que piensas. Intente aumentar el registro para depurar, para que pueda ver exactamente lo que está sucediendo.

0

Prueba esto:

# Loads files from production server 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (library1|library2)/(.*)$ http://production.com/$1/$2 [R=302,L,NC] 

Para lograr esto:

something.dev/ library1 /style.css -> production.com/ library1/style.css something.dev/ Biblioteca2/vendedor/css/style.css -> production.com/ Biblioteca2/vendedor/css/style.css

Cuestiones relacionadas