Pregunta

Estoy dividiendo una de mis aplicaciones más grandes e introduciendo una URL 'cdn' para albergar objetos comunes como CSS, javascript e imágenes para evitar duplicaciones.Sin embargo, lo que necesito hacer es tener URL separadas para nuestros entornos de desarrollo, por lo que es posible que tenga:

http://cdn-dev.example.com
http://cdn-qua.example.com
http://cdn.example.com

dependiendo del entorno en el que estemos trabajando.Puedo hacer que esto funcione para cosas generadas por nuestro código PHP, pero no sé qué archivos .css y .js se llamarán.Por ejemplo, ¿cómo hago algo como:

.cool-button { background-image: url('http://cdn.example.com/images/button.png'); }

¿Cambiar entre los diferentes dominios?

¿Cuál es la mejor manera de lidiar con eso?

[EDITAR]

Para que todos queden claro, la dirección CDN es un dominio diferente al sitio.Entonces, el sitio de desarrollo podría ser http://www-dev.dominio.com cual usaria http://cdn-dev.dominio.com

¿Fue útil?

Solución

Usar rutas relativas, no rutas absolutas. Cuando dentro de un archivo CSS, la ruta es relativa al archivo CSS y no la página HTML.

Si el archivo CSS es aquí

http://cdn.example.com/css/style.css

Y su clase es

.cool-button { background-image: url('../images/button.png'); }

A continuación, el navegador intentará cargar la imagen desde

http://cdn.example.com/images/button.png

Otros consejos

Sólo tiene que utilizar la URL del dominio relativo?

.cool-button { background-image: url('/images/button.png'); }

A continuación, el navegador buscará bajo el dominio actual.

También puede tener un proceso de construir y utilizar plantillas para generar archivos específicos de entorno

por ejemplo. en un archivo llamado yoursite.template.css

.cool-botón {Imagen de fondo: url ( '@@ @@ URL / images / button.png'); }

crear el archivo yoursite.css que reemplace @@ @@ URL con el dominio que desea.

En función de la configuración del servidor, también se puede añadir el php-extensión a los nombres de archivo y hacer que se trata como scripts PHP también:

I.E.: style.css.php would contain:

.cool-button { background-image url(<?php echo $bgImgUrl;?>); }

Esto también funciona para JavaScript-archivos.

He literalmente a estado trabajando en la misma cosa hoy y esto es lo que ocurrió.

Pegue esto en su archivo .htaccess en la raíz de su sitio. Esto se basa obviamente en Apache y Mod_rewrite.

RewriteEngine on
RewriteBase /

# Redirect content to the CDN

RewriteCond %{HTTP_HOST} !^cdn\.server\.com$    [NC]
RewriteRule .*\.(jpg|gif|png|flv|css|js|swf)$   http://cdn.server.com/$0    [R=301,L]

Esto enviará las solicitudes de los tipos de archivo de los soportes a su cdn y mantener las solicitudes de otros tipos en el servidor primario.

Buscando una respuesta a esto también, vi una simple:cree su archivo css con clases duplicadas, una para el escenario 1 (las imágenes se cargan desde el mismo dominio) y otra para el escenario 2 (las imágenes se cargan desde CDN).

p.ej.

.container {background-image:url(my/site/image.png;)}
.container-CDN {background-image:url(http://my.site.cdn.com/image.png;)}

Luego, en tu index.php, introduce PHP para llamar a la clase correcta.

p.ej.

<body class="container<?PHP if ($whatever) {echo "-CDN";} ?>">

Si el servidor es el mismo, puede utilizar rutas relativas. Al igual que /http/blah/test/images/button.png o ../ images / button.png

Al utilizar URLs relativas, puede forzar una URL "base". En la etiqueta , utilice . Entonces, cada vínculo relativo "/style.css" apuntará a " http: // cdn-dev .example.com / style.css "

Para referencia: http://www.w3schools.com/TAGS/tag_base.asp

Bueno ... la solución que se me ocurrió fue ... ... sorta hacker, fea y tonta. Pero, demonios, funcionó:

<?php
    if ($_SERVER['SERVER_NAME'] == "www.domain.tld") {

        $incs_path  = "/usr/local/psa/home/vhosts/domain.tld/non-web-root-folder/private-files";

    }
    else {
        $incs_path  = "incs";
    }

require_once "$incs_path/$file-to-be-called.inc";

?>

Esto es, como se ha señalado, hacky y feo y se podría hacer mucho más bajitos. Pero sí, al menos, permiten definir lugares específicos para grupos específicos de archivos dependiendo del huésped.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top