2009-06-22 10 views
2

Ich versuche, eine Website mit CodeIgniter zu erstellen. Ich werde mehrere Domains von diesem Server aus bedienen, und was ich versuche, ist, die HTTP-Anfragen für www.example1.com von denen für www.example2.com zu trennen und sie dann an die richtigen Anwendungsordner weiterzuleiten.Wie kann ich Apache mitteilen, welches App-Verzeichnis für verschiedene Domains verwendet werden soll?

sagen das meine Verzeichnisstruktur ist:

  • System
    • Anwendung
      • example1
      • example2

Also diese Anfrage

www.example1.com/gallery/

würde dann exmaple1 Ordner umgeleitet werden.

Hat jemand ein Codebeispiel dafür? Offensichtlich müssten Sie das ReWrite-Modul verwenden ...

Ich schaute mich in der Apache-Dokumentation um, aber ich konnte nirgends hinkommen. Lassen Sie es mich wissen, wenn Sie mehr Informationen dazu benötigen.

+0

@ lrussell810: bitte nicht "Danke im Voraus" nach den Änderungen anhängen. es wird als Unordnung betrachtet http://meta.stackexchange.com/questions/97136/suggested-edits-add-thanks-in-advance – naveen

Antwort

1

Verwenden von VirtualHost (und Alias, Rewrite) sind die primären Antworten, aber wenn Sie denken, dass Sie andere Hosts mit dem gleichen Setup hinzufügen/entfernen, würde ich das mod_macro Modul betrachten. Dies ist ein Modul von Drittanbietern, das Ihnen hilft, die Apache-Konfiguration zu vereinfachen und Kopier-/Einfügefehler zu vermeiden.

Ein einfaches Beispiel mit Ihrem Layout, die folgende Definition:

<Macro vh80 name> 
<VirtualHost *:80> 
    DocumentRoot /system/application/$name 
    ServerName www.$name.com 
    CustomLog /system/application/$name/logs/access.log virtcommon 
    ErrorLog /system/application/$name/logs/error.log 
</VirtualHost> 
</Macro> 

Und dann, wenn eine Website ermöglichen, verwenden Sie die folgende Anweisung:

Verwenden vh80 example1

Welche erstellt www.example1.com, um das konfigurierte Verzeichnis als root sowie das konfigurierte Protokollierungsverzeichnis zu verwenden.

+0

Whoa. Das ist cool. Mein anderes Problem ist, dass sich der Assets-Ordner von Codeigniter außerhalb des Ordners/system/application/example1 befindet. Es ist eigentlich auf der gleichen Ebene wie der Systemordner, der sich im Wurzelverzeichnis befindet. Ich bin immer noch auf der Suche nach einer Möglichkeit, eine Direktive für img, js und css Anfragen aus jeder Domäne zu schreiben, und sie an Assets/example1/js, assets/example1/css, assets/example1/img umzuleiten. – picardo

1

Das ist wirklich zwei Fragen:

  1. wie man www.example1.com und www.example2.com anders? Die Antwort darauf ist die VirtualHost Direktive.

  2. Wie mache ich/gallery Punkt auf example1? Dies geschieht mit der Alias-Anweisung.

2

Was Sie brauchen, ist VirtualHost genannt www.example1.com zu machen und www.exaplme2.com jeweils in einem anderen Ordner in Ihrem Dateisystem verweisen.

Wenn Sie zusätzlich den Hauptinhalt zu dienen, einen anderen Weg in der URI haben möchten haben Sie verschiedene Möglichkeiten:

  1. Körperlich die Ordner erstellen und machen keine weiteren Änderungen

  2. Körperlich eine erstellen Link (mit dem Namen Galerie zeigt auf dem Hauptvirtualstammordner) in den Ordner und verwenden Sie die FollowSymLinks Option für die Virtual

  3. verwenden Sie ein Alias Direktive in der Virtual

    Alias /gallery/
    
  4. Verwenden mod_rewrite

    RewriteRule /gallery/(.*) /$1 [QSA] 
    

Die einfachste (CodeIgniter erlaubt) wäre die Option 1 oder 2.

Snippet aus der Virtual Dokumentation:

 
Running several name-based web sites on a single IP address. 

Your server has a single IP address, and multiple aliases (CNAMES) 
point to this machine in DNS. You want to run a web server for 
www.example.com and www.example.org on this machine. 

Note 

Creating virtual host configurations on your Apache server does 
not magically cause DNS entries to be created for those host 
names. You must have the names in DNS, resolving to your IP 
address, or nobody else will be able to see your web site. 
You can put entries in your hosts file for local testing, 
but that will work only from the machine with those hosts 
entries. 

Server configuration 

# Ensure that Apache listens on port 80 
Listen 80 

# Listen for virtual host requests on all IP addresses 
NameVirtualHost *:80 

<VirtualHost *:80> 
DocumentRoot /www/example1 
ServerName www.example.com 

# Other directives here 

</VirtualHost> 

<VirtualHost *:80> 
DocumentRoot /www/example2 
ServerName www.example.org 

# Other directives here 

</VirtualHost> 

The asterisks match all addresses, so the main server serves no requests. 
Due to the fact that www.example.com is first in the configuration file, 
it has the highest priority and can be seen as the default or primary 
server. That means that if a request is received that does not match 
one of the specified ServerName directives, it will be served by this 
first VirtualHost. 
Verwandte Themen