Ein VirtualHost für bestimmte URLs, ein anderer VirtualHost für alle anderen URLs in Apache

Ein VirtualHost für bestimmte URLs, ein anderer VirtualHost für alle anderen URLs in Apache

Ist es möglich, Apache so zu konfigurieren, dass verschiedene virtuelle Hosts auf derselben IP-Adresse und demselben Port lauschen, sodass bestimmte Pfade (nicht die vollständige Domäne, nur der lokale Pfad) zu einem virtuellen Host und andere standardmäßig zu dem anderen Host verweisen?

Zum Beispiel:

#All requests to www.mysite.com/special-url go here

<VirtualHost /special-url:80>
  DefaultType application/x-httpd-php
  ServerName server1
  Document Root "/home/me/server1"
  <Directory "/home/me/server1">
    AllowOverride None
    Order allow, deny
    allow from all
  </Directory>
</VirtualHost>

#All other requests go here

<VirtualHost *:80>
  DefaultType application/x-httpd-php
  ServerName server1
  Document Root "/home/me/server2"
  <Directory "/home/me/server2">
    AllowOverride None
    Order allow, deny
    allow from all
  </Directory>
</VirtualHost>

Diese Serverkonfiguration funktioniert nicht und das Hinzufügen von Platzhalterkombinationen zum ersten VirtualHostTag (z. B. VirtualHost */special-url:80) funktioniert auch nicht. Wenn ich dies ausführe, leitet Apache Anfragen stattdessen an /special-urlweiter /home/me/server1. Wenn ich jedoch nach suche , /foowird es trotzdem nach in suchen server1und zurückgeben, selbst wenn ein Verzeichnis mit dem Namen in 404vorhanden ist .foo/home/me/server2

Gibt es eine Möglichkeit, einen VirtualHost nur für bestimmte URLs und einen anderen VirtualHost für alle anderen URLs zu haben?

Antwort1

So funktioniert es nicht. Ein virtueller Host basiert entweder auf der IP-Adresse oder dem Hostnamen, nicht auf dem Pfad. Aber es gibt noch ein paar andere Dinge, die Sie tun können, um dasselbe Ziel zu erreichen:

  • Wenn der server1virtuelle Host einen separaten Hostnamen hat, können Sie eine Umleitung einrichten
  • Wenn Sie lediglich Inhalte von einem anderen Pfad für diese URL bereitstellen möchten, können Sie AliasMatchdiesen Pfad mit einem abbilden.
  • Sie können mod_rewriteeine URL-Umschreibung gemäß Ihren Vorgaben durchführen

Ich kann nicht genauer darauf eingehen, ohne mehr darüber zu wissen, was Sie genau erreichen wollen. Aber ich glaubedie Apache-Dokumentation zum Zuordnen von URLs zum Dateisystemgibt Ihnen einen guten Ausgangspunkt.

Antwort2

Klingt, als ob dies ein Job für das Proxy-Modul von Apache sein könnte.

Schauen Sie sich die ProxyPass-Anweisung an:

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass

Antwort3

Virtuelle Hosts dienen zur Verarbeitung des Domänenteils der Anforderung, sodass Sie mehrere Domänen auf demselben Server hosten können.

Sie könnten möglicherweise etwas mit einem Alias ​​oder einer Umschreibung tun. Oder Sie könnten die verschiedenen URLs in Ihre App einbauen und sie damit umgehen lassen.

verwandte Informationen