2009-06-29 7 views
4

Ich versuche, eine Multi-App-CodeIgniter-Site zu erstellen, in der die Assets für alle Apps in einem einzigen Ordner namens "Assets" gespeichert werden. Innerhalb dieses einzelnen Ordners hätte jede App ihren eigenen Asset-Ordner. Also, wenn das ist mein Stammverzeichnis ...HOWTO: Neuschreiben von Anfragen für Bilder, CSS und JS in verschiedene Ordner für jede Anwendung?

 
user_guide 
apps_folder (this is where all my application folders live) 
system 
assets 

... das Vermögen Ordner so organisiert werden:

 
assets 
    myapp1 
     js 
     img 
     css 
     media 

Hier ist meine Herausforderung. Ich versuche, eine Apache-Direktive zu schreiben, die alle Anforderungen für Dateien, die auf css, js, png und gif enden, in das entsprechende Asset-Verzeichnis für diese App umschreibt. Der Benutzer kann jedoch den genauen Speicherort dieser Assets auf dem Server nicht ermitteln. Um Ihnen ein Beispiel:

ist die Anfrage: www.myapp1.com/js/jquery.js

Die Datei befindet sich in: assets/Myapp1/js

Die Richtlinie wird prüfen a) die Domain-Adresse b) Dateierweiterung

... und auf der Grundlage dieser Variablen, wird die uRL neu schreiben, damit dir wirkliche Lage des Vermögens versteckt, und macht es möglich, Vermögenswerte zu verweisen, als ob sie alle waren befindet sich an der Wurzel der Website. Hat jemand jemals so etwas getan?

Dank,

Antwort

3

Das ist völlig möglich nutzen können. Sehen Sie sich die Apache Rewrite-Guide:

http://httpd.apache.org/docs/1.3/misc/rewriteguide.html

Ihre Regel etwas wie folgt aussehen:

RewriteCond %{HTTP_HOST} \.myapp1\.com$ 
RewriteRule ^/js/(.*)\.js$ assets/myapp1/js/$1 

Viel Spaß!

+0

Ich verstehe. Ja, das sollte funktionieren, aber wenn ich versuche, das lokal zu implementieren, funktioniert es nicht so, wie es sollte. Ich weiß nicht, was falsch ist. Hier ist meine .htaccess Datei, die sich im root befindet. RewriteEngine auf \t \t RewriteCond% {HTTP_HOST} Myapp1 \ .localhost \ .dev $ \t RewriteRule ^/js/(. *) \. js $ assets/Myapp1/js/$ 1 \t RewriteCond $ 1 treffen^(Inhalt |. * \. js |. * \. css |. * .png | user_guide | index \ .php | robots \ .txt) \t RewriteRule^(. *) $/codeigniter-171/index. php/$ 1 [L] picardo

+0

Nur ein paar Worte der Erklärung, die zweite Rewrite-Regel ist, alle Anfragen über Bootstrapper umzuleiten, aber der gleiche Fehler 404 passiert, wenn ich es auch entfernen. Außerdem ist mir klar, dass die oben genannte Regel wahrscheinlich .js am Ende benötigt, nach $ 1, nein? – picardo

+0

Die Ursache des 404 gefunden. Der Schrägstrich vor der js in der RewriteRule sollte nicht da sein. Mann, 3 Stunden, um diese Scheiße herauszufinden. – picardo

1

Sie AliasMatch

<VirtualHost myapp1> 
    AliasMatch ^(.*\.)(js|css)$ /path/to/assets/myapp1$1$2 
</VirtualHost> 
+0

So wie ich es verstehe, kann derselbe öffentliche Pfad einem anderen privaten Pfad basierend auf dem Dateisuffix zugeordnet werden. Aber ein Alias ​​wird alle öffentlichen Pfade auf denselben internen Pfad abbilden, nicht? –

+0

Aber ich versuche, nur die Anfragen für js, css und Bilddateien umzuleiten. Alle anderen Anfragen müssen über die Bootstrap-Datei geleitet werden, wie vom Framework gefordert. Ihre Lösung scheint für alle Anfragen an die Wurzel zu gelten, nein? – picardo

+0

Ich dachte, Apache würde die Verzeichnisse übereinander abbilden, wenn also keine Ressource im Alias ​​gefunden wird, wird der Root überprüft. Ich habe es gerade getestet und das war nicht der Fall. Sieh dir jedoch AliasMatch an, mit dem du gegen eine Regex passen kannst. – SpliFF

Verwandte Themen