12
votes

Dans un cadre utilisant des règles de réécriture, la meilleure solution pour intégrer CSS et JS?

J'ai un cadre qui achète toutes les URI entrantes à travers un fichier de base et pour traiter des fichiers statiques, j'ai un sous-répertoire / statique dans lequel je mets tous les CSS, JS et images (c'est-à-dire / statique /css/main.css) afin de garder les choses claires.

Mon propre code et mes plugins traitent de cette amende, mais parfois, d'autres personnes doivent être implémentées, et souvent des fichiers CSS tenteront de styles avec les appels vers URI dans ces fichiers. Comment puis-je gérer cela de la meilleure façon?

un exemple;

/ à propos / entreprise itinéraires à / script? q = environ / entreprise et se verrouille dans la structure principale du site. Pourtant; /STICTIC/CSS/MAIN.CSS utilise une image d'arrière-plan de; /Static/images/widget/bg-color.png

Comme il s'agit d'un cadre, je ne suis pas content de CODE DUR-CODE, les chemins statiques / statiques dans les fichiers CSS. Pour un, je ne veux pas restreindre les sites Web pour seulement être servi à partir d'un répertoire racine. :) Pour tout JS, il y a des objets qui traitent de ceci (c.-à-d. Var x = $ xs_dir.js + '/script.js';) mais rien n'existe pour CSS. J'ai cinq options, je pense;

  1. (pire) a une option dans mon outil d'administrateur qui étudie tous les fichiers CSS pour les références URI et les répeint avec le répertoire statique droit et l'écriture de tous les CSS comme si elles sont statiques sur un répertoire racine. < / p>

  2. (pauvre) comptez sur la capacité du serveur Web à alias tout répertoire statique à un répertoire statique de la racine et laissez les administrateurs y faire face.

  3. (MEH, SLOW) Servez les fichiers CSS dans le cadre, filtrant les URI filtrant les chemins statiques droit. code de main de la main des portions statiques de mes fichiers CSS pour n'importe quelle configuration du serveur peut y avoir, et assurez-vous simplement qu'ils sont faciles à trouver et à changer. < / li>

  4. (Probablement meilleur, mais complexe?) Avoir une règle de réécriture qui détecte des images dans le répertoire actuel, les transmettre au répertoire statique et écrire tous les CSS avec un chemin dynamique reconnu. (IE

    Toute option supplémentaire? Idées? Je connais Joomla et Similaire a une réécriture de fichiers et ne faites probablement pas. 5?


0 commentaires

6 Réponses :


6
votes

Je ne sais pas si vous avez un fichier .htaccess ou non, mais une option serait de mettre dans une règle de réécriture de la demande dans un dossier "Images" à rediriger vers votre dossier statique (ou autre):

RewriteRule ^[^\?]*(images/)(.*)$ /static/$1$2 [NC,L]


1 commentaires

Oui, je pense que c'est l'option 2 ci-dessus. La seule raison pour laquelle je suis réticent est bien sûr le côté administrateur, comme souvent les geeks qui mettent en œuvre le cadre n'ont pas accès au serveur Web, mais oui, le mieux jusqu'à présent. :)



1
votes

Vous pouvez utiliser la balise de base HTML http://www.w3schools.com/tags/tag_base .asp pour définir le chemin pour toute l'URL relative de votre HTML. Cependant, cela pourrait aussi casser tout votre lien relatif.


1 commentaires

Vous ne savez pas comment cela aborde la partie-cadre et comment traiter les structures de chemin entre le client et le serveur? Voulez-vous utiliser la balise de base en conjonction avec l'une des options que j'ai exposées ci-dessus?



0
votes

L'option 5 fonctionne avec Apache. Si toutes vos références d'image dans vos fichiers CSS commencent avec un sous-rédigé relatif sans barre oblique précédente (par exemple, url (images / image.png) ), puis dans Vous pouvez réécrire images / à . Votre .htaccess reste dans et s'applique uniquement à avec les fichiers CSS et travaillez à partir de l'endroit où vous l'avez déposé.

Le Rewriterule doit seulement savoir que images / par rapport à lui-même est celui qui compte.


0 commentaires

0
votes

en supposant que vous acheminez tout sur «script.php» Cela acheminerait tous les fichiers non existants vers script.php, permettant ainsi une tenue statique directement, tout en routant vers vos contrôleurs.

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ script.php [QSA,L]


0 commentaires

0
votes

Si tous les fichiers CSS se retrouvent dans / statique / css / et toutes les images que les références CSS se retrouvent dans / statique / images / , alors faites simplement Assurez-vous que lorsque vous faites référence à une image de CSS que vous utilisez un chemin relatif ../ images / widget / bg-color.png et cela devrait fonctionner correctement.


1 commentaires

En théorie, vous êtes correct :) Cependant, vous voulez simplement importer un plug-in ou un module, et ils gardent les choses à différents endroits. Mon QUIBBLE D'ORIGINAL Était-ce que j'utilise JQuery UI, qui utilise des fichiers CSS avec des références à des images / ... '.



1
votes

Il est probablement un peu optimiste d'exiger cette approche des administrateurs, en particulier si elles ne contrôlent pas l'environnement du serveur, cependant:

Vous pouvez le faire par l'utilisation d'un domaine séparé (SUB) pour servir des fichiers statiques. Vous pouvez ensuite créer un hôte virtuel distinct sur votre serveur Web pour servir ces fichiers. Cette approche présente également l'avantage que vous puissiez optimiser la vitesse en utilisant un domaine sans cookie et des options de cache agressives. De plus, il permet au navigateur d'allumer des threads supplémentaires contre le sous-domaine, de télécharger ces fichiers en parallèle avec le reste de la page.

E.g. Google héberge déjà un certain nombre de frameworks open source que vous pouvez utiliser directement, comme jQuery ui avec le Correspondant CSS .

Une autre option pour les administrateurs est d'utiliser un proxy inverse, comme vernis , pour servir et mettre en cache tout Fichier existant, puis passez à chaque autre GET URI sur le serveur Backend contenant le contrôleur de cadre (puis les fichiers-cadres, à l'exception du «routeur», devraient être en dehors du dossier public pour la sécurité).

Je suppose que au moins avoir la possibilité de servir des fichiers statiques d'un domaine moins cookie serait pratique, sinon la réponse de Duffmans devrait suffire.


0 commentaires