it-swarm.com.de

Virtualhost für Wildcard-Subdomain und statische Subdomain

Ich habe eine ungerade Situation, in der ich die URLs app1.example.com, example.com und *.example.com haben möchte, die alle einen anderen virtuellen Host verwenden. Das ist was ich habe (ausgenommen example.com, weil es nur unordentlich wird).

<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 miteinander in Konflikt stehen. Wer zuerst aufgeführt wird, gewinnt. Wie kann ich einen virtuellen Host mit Platzhalter und einen bestimmten Host hosten?

Hinweis: Ich ändere nicht nur DocumentRoot in der Konfiguration. Daher kann die Änderung der DocumentRoot-Variablen durch mod_rewrite nicht behoben werden.

63
Dave
<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 zur Standardeinstellung, wenn Sie keine explizite Übereinstimmung erhalten. Wenn Sie also app.otherexample.com darauf verweisen lassen würden, wäre dies App1.example.com.

148
Tim

Platzhalter können nur in ServerAlias ​​und nicht in ServerName verwendet werden. Etwas, das mich stumm gemacht hatte.

Für Ihren Anwendungsfall sollte Folgendes ausreichen

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

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

9

Dies funktioniert auch für https, das eine Lösung für die Erstellung von Projektverzeichnissen war. weil chrom keine non-ssl mehr mag, verwendet man keine freie ssl mehr. Hinweis: Mein Webserver ist Wamp64 unter Windows 10, daher würde ich diese Konfiguration nicht aufgrund von Variablen verwenden, es sei denn, Sie verwenden Wamp. 

<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>

0
James Marks