| 

.NET C# Java Javascript Exception

2
Hey Leute,

in einem externen Projekt sind absolute Pfadangaben verwendet worden also src="/gfx/blabla/
Das Projekt liegt nun bei uns in der Entwicklerversion in einem Projektordner, der natürlich die Pfadangaben zerschießt.

Weiß jemand wie ich die Pfadangaben in diesem Ordner anpassen kann?
News:
22.07.2012
spiike 170 1 7
Versteh ich das richtig, dass Du keinen Entwickler-Webserver hast, sondern die Dateien direkt als file:///... öffnen willst?
Matthias Hlawatsch 22.07.2012
7 Antworten
1
Schön, dass du mit den Kommentaren immer ein paar mehr Informationshäppchen preis gibst :P

Also ich fasse deine Umgebung mal so auf 1 Apache (egal ob in VM oder Entwickler-Server oder sonst wo) der mehrere (>=2) Projekte hosten soll welche unter Umständen auf gleichnamige Verzeichnisse (gfx) zugreifen sollen. Diese gfx-Verzeichnisse sind aber nur im Namen, nicht aber im Inhalt identisch (oder vielleicht doch identisch... egal...)

Die http.conf gilt global für den default-webspace und alle virtuellen hosts, allerdings lassen sich diese durch vhosts-configs überschreiben.

Versuch doch mal die Vorschläge von Karill und/oder von Matthias zusammen mit vhosts. Mit jedem VirtualHost lassen sich auf einer physischen (oder auch virtuellen) Maschine voneinander unabhängige Umgebungen je Domain/IP erstellen.

Im speziellen lassen sich für jeden vhost eigene DocumentRoots definieren und mit mod_rewrite (ebenfalls für jeden vhost) Pfade so umbiegen, dass die Ordner irgendwo auf dem Rechner (oder sogar auf anderen Servern) liegen können.

Z.B. nach Hostname
<VirtualHost 127.0.0.1:80>
ServerName eins.projekte.local
DocumentRoot /var/www/projekt_1
</VirtualHost>

<VirtualHost 127.0.0.1:80>
ServerName zwei.projekte.local
DocumentRoot /var/www/projekt_1
</VirtualHost>

Dafür ist ein lokaler DNS-Server recht praktisch, zur Not geht aber auch ein eintrag in /etc/hosts bzw. %SystemRoot%\system32\drivers\etc\hosts

oder nach IP-Adressen
<VirtualHost 192.168.2.23:80>
DocumentRoot /var/www/projekt_1
</VirtualHost>

<VirtualHost 192.168.2.42:80>
DocumentRoot /var/www/projekt_1
</VirtualHost>


Die Code-Beispiele sind unvollständig, weil ich nicht weiß was du genau vor hast. In der Apache-Dokumentation findest du aber eigentlich alles was du dafür benötigst.
24.07.2012
phg 1,6k 4
0
Nein, du verstehst das nicht richtig :)
Wir haben einen Entwickler-Server, aber wir haben jeweils nochmal lokale Server auf den Rechnern über VM laufen.
22.07.2012
spiike 170 1 7
0
Quick&Dirty: Editor Deiner Wahl, Suchen & Ersetzen (ist aber auch sehr gefährlich, etwas falsches zu ersetzen)
Ansonsten hängt das davon ab, wie die HTML Seiten erzeugt werden.
23.07.2012
Jaksa 4,0k 2 8
Nein das will ich nicht machen, wenn ich die Seiten später wieder hochladen dann muss ich wieder alle Pfade anpassen etc. gibts es da nicht ne Möglichkeit via http.conf etwas einzustellen?
spiike 23.07.2012
0
In der http.conf (Apache) gibt es einmal die Einstellung
DocumentRoot "(...)"
und dann noch eine Zeile die ca. wie folgt aussieht
<Directory "(...)">
in beiden Zeilen das (...) durch den neuen "Rootpath" ändern...

Hoffe, es ist das, was du suchst :)

so far
Karill Endusa
23.07.2012
Karill Endusa 1,5k 1 9
Kann man die http.conf denn für jeden Ordner anders erstellen? Oder ist dieser Global für alle? Ich suche nämlich was, was in jedem Ordner anders ist
spiike 23.07.2012
0
Wenn die Anzahl der von dem externen Projekt verwendeten top-level-Pfade nicht zu groß ist (und ein Apache verwendet wird, was ich aus den anderen Posts herauslese), dann würde ich versuchen, mit den Mitteln von mod_alias ein Mapping zwischen den Verzeichnissen des externen Projekts und dem Ablageort in Eurer Projektstruktur herzustellen.

Ich habe da nicht viel Hands-On-Erfahrung damit, aber der Doku nach müßte Dich etwas wie

AliasMatch ^/gfx(.*) /your_project_path/third_party/vendor1/gfx$1

eigentlich ans Ziel bringen.

Zu der Rückfrage in Deinem Kommentar:
Ist das jetzt ein reales Problem oder eine abstrakte Möglichkeit am Horizont? Konzentriere Dich auf die aktuelle Aufgabenstellung, sonst wird es unnötig kompliziert und aufwendig.
Ansonsten wäre dann erst mal die fachliche Aufgabenstellung zu lösen, wie für eine URL nach dem Schema http://server/gfx/irgendwas entschieden werden kann, ob sie zu Projekt 1 oder 2 gehört. Je nachdem, wie Deine Projekte miteinander integriert werden müssen, hast Du vielleicht die Möglichkeit, den Server-Teil zu variieren, also jedes Projekt über seinen eigenen "Server" auszuliefern. Dann definiere für jedes Projekt eine eigene (auf die gleiche IP gemappte) Sub-Domain ("http://projekt1.deine.domain/") oder einen eigenen Port (http://www.deine.domain:8001) und lege in der Apache-Konfig dafür virtuelle Hosts mit eigenem Docroot an. Zu Details siehe die Antwort von phg. Wenn das nicht geht, dann lassen sich die beiden Projekte vielleicht in tieferen Ebenen der Pfadstruktur unterscheiden. Dann mußt Du in den sauren Apfel beißen und mit mehreren Aliasen der Art

AliasMatch ^/gfx/foo(.*) /your_project_path/third_party/vendor1/gfx/foo$1 
AliasMatch ^/gfx/bar(.*) /your_project_path/third_party/vendor2/gfx/bar$1

die Pfade auseinanderhalten. Eventuell wirst Du dann auch zu mod_rewrite statt mod_alias greifen, um das Mapping noch differenzierter gestalten zu können. Und wenn das zu aufwendig wird oder tatsächlich einzelne Pfade komplett identisch in beiden Projekten vorkommen - dann wirst Du um Umbenennen und Suchen&Ersetzen nicht mehr herumkommen. Das läßt sich ja auch mit überschaubarem Aufwand automatisieren.
23.07.2012
Matthias Hlawatsch 13,2k 4 9
Naja, die Idee ist gut bei der Umsetzung ist es aber irritierend.

Wenn ich 2 Projekte habe, die jeweils einen GFX Ordner haben, dann funktioniert das nicht mehr...

Danke für den Tip, aber andere Vorschläge?
spiike 23.07.2012
Siehe das Edit meiner Antwort.
Matthias Hlawatsch 24.07.2012
0
Eventuell verstehe ich das Problem falsch, aber was spricht gegen folgende Zeile HTML-Code:

<base href="http://your-server.de/path/to/project/" />


LG Marcel
24.07.2012
m.marnitz 216 4
Also damit scheints nicht wirklich zu funktionieren.
spiike 24.07.2012
Was nicht verwunderlich ist, denn laut Doku greift diese Angabe nur für relative URLs. Außerdem wolltest Du ja die externen Quellen nicht ändern, oder?
Matthias Hlawatsch 24.07.2012
Genau, nur Lokal
spiike 24.07.2012
0
Ich glaube die Antwort von Marcel scheint schon in die Richtung zu gehen. Ihr denkt da zu Kompliziert :-)

Ich versuche es mal aufzugliedern:

Projekt_Hosen
.... core
.... js
.... css
.... images

Projekt_Taschen
.... core
.... js
.... css
.... images

So auf dem VM liegen diese nun wie folgt vor:
VM://var/www/projekt_hosen/
VM://var/www/projekt_taschen/

Beim Aufruf im Browser:
http://localhost/projekt_hosen/
http://localhost/projekt_taschen/

Index.html -> img ... src="/images/testhose.jpg"

Browser will dann nicht http://localhost/projekt_hosen/ aufrufen, sondern http://localhost/ weil das das Root Verzeichnis ist :-)

Ich hoffe ich konnte es ein wenig deutlicher machen?

LG Paul
24.07.2012
spiike 170 1 7
1
Wie wäre es, diese Angaben Deiner *Frage* hinzuzufügen, statt sie als *Antwort* zu posten? Am besten natürlich gleich von Beginn, damit wir nicht so lange im Nebel stochern müssen, ansonsten auch gerne per Edit.

Ansonsten: ist schon klar. Die Antwort haben phg und ich eigentlich schon gegeben. Sieht so aus, als ob die Pfadstrukturen sehr ähnlich sind. Dann solltest Du die Lösung mit den VHosts anstreben, also z.B. localhost:8001 mit Docroot VM://var/www/projekt_hosen/ und localhost:8002 => VM://var/www/projekt_taschen/. Wenn das nicht geht, kommst Du ums Editieren der Quellen mMn nicht herum.
Matthias Hlawatsch 24.07.2012

Stelle deine Programmieren-Frage jetzt!