Virtualhost für Wildcard-Subdomain und statische Subdomain

76

Ich habe eine seltsame Situation , wo ich die URLs haben will app1.example.com, example.comund *.example.com alle einen anderen virtuellen Host verwenden. Dies ist, was ich habe (außer, example.comweil es nur unordentlicher macht).

<VirtualHost *>
  ServerName app1.example.com
  ServerAlias app1.example.com

  DocumentRoot = /var/www/app1
  # Other configuration for this app here

</VirtualHost>

<VirtualHost *>
  ServerName wildcard.example.com
  ServerAlias *.example.com

  DocumentRoot = /var/www/wildcard
  # other configuration for this app here

</VirtualHost>

Das Problem ist, dass sie in Konflikt stehen. Wer zuerst aufgeführt wird, gewinnt. Wie kann ich sowohl einen virtuellen als auch einen bestimmten Wildcard-Host hosten?

Hinweis: Ich ändere nicht nur DocumentRootdie Konfiguration, daher wird sie mod_rewritedurch Ändern der DocumentRoot-Variablen nicht behoben.

Dave
quelle

Antworten:

159
<VirtualHost *:80>
  DocumentRoot /var/www/app1
  ServerName app1.example.com
</VirtualHost>

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

<VirtualHost *:80>
  DocumentRoot /var/www/wildcard
  ServerName other.example.com
  ServerAlias *.example.com
</VirtualHost>

Sollte arbeiten. Der erste Eintrag wird zum Standardeintrag, wenn Sie keine explizite Übereinstimmung erhalten. Wenn Sie also auf app.otherexample.com verweisen, wird app1.example.com abgefangen.

Tim
quelle
1
Nur eine Frage, was macht NameVirtualHost *:80das?
Pedro Moreira
Diese Anweisung aktiviert die namenbasierten
Andreas Hinderberger
3
Entfernen Sie die NameVirtualHost *:80: AH00548: NameVirtualHost hat keine Auswirkung und wird in der nächsten Version entfernt
Nerdoc
Die Wild Card funktioniert bei mir nicht, weißt du warum?
Ericn
1
NameVirtualHost *:80ist wichtig für Apache 2.2, keine Notwendigkeit für Apache 2.4, ich weiß nicht warum.
Leo Lee
16

Platzhalter können nur in der ServerAliasund nicht in der verwendet werden ServerName. Etwas, das mich verblüfft hatte.

Für Ihren Anwendungsfall sollte Folgendes ausreichen

<VirtualHost *:80>
    ServerAlias *.example.com
    VirtualDocumentRoot /var/www/%1/
</VirtualHost>

Weitere Informationen finden Sie auch unter https://www.chris-shaw.com/blog/using-wildcards-in-virtual-hosts-on-apache

Christopher Shaw
quelle
Ihr Link ist jetzt ein 404… danke für das Update
MonTea
1

Dies funktioniert auch für https benötigt eine Lösung, um Projektverzeichnisse zu erstellen, das war es. weil chrome kein ssl mehr mag, wird kein freies ssl mehr verwendet. Hinweis: Mein Webserver ist Wamp64 unter Windows 10, daher würde ich diese Konfiguration aufgrund von Variablen nur verwenden, wenn Sie wamp verwenden.

<VirtualHost *:443>
ServerAdmin [email protected]
ServerName test.com
ServerAlias *.test.com

SSLEngine On
SSLCertificateFile "conf/key/certificatecom.crt"
SSLCertificateKeyFile "conf/key/privatecom.key"

VirtualDocumentRoot "${INSTALL_DIR}/www/subdomains/%1/"

DocumentRoot "${INSTALL_DIR}/www/subdomains"
<Directory "${INSTALL_DIR}/www/subdomains/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>

James Marks
quelle