2009-12-21 9 views
5

Ich versuche, über 5 Websites alle auf einem Apache-Server zu schreiben, der alle auf einer IP-Adresse ist.Apache 2 Sites-Available Konfiguration

Zum Beispiel:

  • /var/www/site1
  • /var/www/site2
  • /var/www/site3
  • /var/www/site4
  • /var/www/site5

Allerdings, wenn ich einen Link auf der Website 2 nur mit, zum Beispiel, erstellen. /index.php, Sie würden erwarten, dass es in /var/www/site2/index.php aussieht ... aber es wird tatsächlich in /var/www/index.php aufgelöst.

Gibt es sowieso Apache zu wissen, dass die separaten Site-Ordner zu den separaten Ordnern verhalten und auflösen müssen?

Dies ist meine Website-verfügbare Datei im Moment. Ein ziemlich Standard-Setup Ich glaube:

<VirtualHost *:80> 
    ServerAdmin [email protected] 

    DocumentRoot /var/www 
    <Directory /> 
      Options FollowSymLinks 
      AllowOverride None 
    </Directory> 
    <Directory /var/www/> 
      Options Indexes FollowSymLinks MultiViews 
      AllowOverride all 
      Order allow,deny 
      allow from all 
    </Directory> 

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    <Directory "/usr/lib/cgi-bin"> 
      AllowOverride None 
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
      Order allow,deny 
      Allow from all 
    </Directory> 

    ErrorLog /var/log/apache2/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog /var/log/apache2/access.log combined 

Alias /doc/ "/usr/share/doc/" 
<Directory "/usr/share/doc/"> 
    Options Indexes MultiViews FollowSymLinks 
    AllowOverride None 
    Order deny,allow 
    Deny from all 
    Allow from 127.0.0.0/255.0.0.0 ::1/128 
</Directory> 

Jede Hilfe apreciated würde.

Vielen Dank.

Andrew Barlow

+1

Sie, was Sie mit wollte Konntest erreichen mein Vorschlag oder fehlt dir noch etwas? – Zeograd

+0

Nein, das macht den Job perfekt. Vielen Dank!!! – Schodemeiss

Antwort

11

Sie brauchen eine Direktive Server innerhalb des <VirtualHost>. Es teilt dem Server mit, welcher virtuelle Host derzeit verwendet wird, abhängig von der Browseranforderung (wenn Ihr Client auf http://site1.example.com oder http://site2.example.com zugreift, werden sie sich mit der gleichen IP verbinden, daher Server, aber die Anfrage enthält die ursprüngliche Anfrage-URL). Sie müssen Ihren <VirtualHost> Block duplizieren, um eine pro gehostete Website zu haben. Jeder Block unterscheidet sich hauptsächlich durch seinen ServerName und DocumentRoot. Sie können "apache2ctl -S" verwenden, um zu sehen, wie Apache Ihre virtuellen Hosteinstellungen verstanden hat.

Sie können eine einzelne Datei mit dieser Art von Inhalt verwenden:

<VirtualHost *:80> 
    ServerName site1.myserver.com 
    DocumentRoot /var/www/site1 
    ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName site2.myserver.com 
    DocumentRoot /var/www/site2 
    ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName site3.myserver.com 
    DocumentRoot /var/www/site3 
    ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName site4.myserver.com 
    DocumentRoot /var/www/site4 
    ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName site5.myserver.com 
    DocumentRoot /var/www/site5 
    ... 
</VirtualHost> 

Natürlich, vielleicht sicher, dass der dns für all die Namen auf Ihrer IP endet. Es muss nicht Subdomains sein, solange sie auf Ihrer Server-IP landen und Sie einen entsprechenden Servernamen dafür haben. Wenn Sie zusätzliche Namen für eine einzelne Site benötigen, können Sie sie mit "ServerAlias ​​secondname.myserver.com drithname.myserver.com" unter ServerName

+0

Ich denke, ich verstehe, aber können Sie mir ein schnelles Beispiel schreiben, um es in meine Datei zu stecken ??? – Schodemeiss

+0

Ich habe die Antwort aktualisiert, um sie einzuschließen – Zeograd

+0

Danke dafür. Ein absoluter Lebensretter! – Schodemeiss

3

@ Zeograd die Antwort ist wahrscheinlich die richtige Antwort für die meisten Lösungen, aber ich hatte eine ähnliches Problem und alles, was ich tun musste, war das Rewrite-Modul mit dem Befehl a2enmod zu aktivieren.

Dies ist, was ich über die Kommandozeile lief in Ubuntu:

sudo a2enmod rewrite 
sudo service apache2 restart 

Wenn sudo service apache2 restart nicht funktioniert, können Sie versuchen:

sudo /etc/init.d/apache2 restart