web-dev-qa-db-fra.com

Virtualhost Pour les sous-domaines Wildcard et Static

J'ai une situation étrange où je veux avoir les URLs app1.example.com, example.com et *.example.com utilisant tous un hôte virtuel différent. C’est ce que j’ai (à l’exclusion de example.com car cela le rend encore plus désordonné).

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

Le problème est qu'ils sont en conflit. Celui qui est répertorié en premier gagne. Comment puis-je héberger un virtualhost générique et un spécifique?

Remarque: je ne change pas simplement DocumentRoot dans la configuration, utiliser donc mod_rewrite pour modifier la variable DocumentRoot ne le résout pas.

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>

Devrait marcher. La première entrée deviendra la valeur par défaut si vous n'obtenez pas de correspondance explicite. Donc, si vous aviez app.otherexample.com à pointer dessus, il serait capturé par app1.example.com.

148
Tim

Les caractères génériques ne peuvent être utilisés que dans ServerAlias ​​plutôt que dans ServerName. Quelque chose qui m'avait laissé perplexe.

Pour votre cas d'utilisation, les éléments suivants devraient suffire

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

il y a aussi plus d'informations sur https://www.chris-shaw.com/blog/using-wildcards-in-virtual-hosts-on-Apache

9
Christopher Shaw

Cela fonctionne également pour https avait besoin d'une solution pour créer les répertoires de projet. parce que chrome n'aime plus l'utilisation de ssl libre. Remarque: Mon serveur Web est Wamp64 sous Windows 10, je ne voudrais donc pas utiliser cette configuration à cause de variables sauf si vous utilisez 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