web-dev-qa-db-ja.com

ワイルドカードサブドメインおよび静的サブドメインの仮想ホスト

URLを取得したいという奇妙な状況がありますapp1.example.comexample.comおよび*.example.comすべてが異なる仮想ホストを使用しています。これは私が持っているものです(example.comそれはただそれを厄介にするからです。

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

問題は、それらが競合することです。最初にリストされているものが優先されます。ワイルドカード仮想ホストと特定の仮想ホストの両方をホストするにはどうすればよいですか?

注:構成内のDocumentRootを変更するだけではないので、mod_rewrite DocumentRoot変数を変更しても修正されません。

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

動作するはずです。明示的な一致が得られない場合、最初のエントリがデフォルトになります。そのため、app.otherexample.comがポイントしている場合、app1.example.comでキャッチされます。

152
Tim

ワイルドカードは、ServerNameではなくServerAliasでのみ使用できます。私が困惑した何か。

ユースケースには、次のもので十分です。

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

https://www.chris-shaw.com/blog/using-wildcards-in-virtual-hosts-on-Apache にも詳細があります。

9

これは、プロジェクトディレクトリを作成するソリューションが必要なhttpsでも機能しました。 chromeは無料sslを使用する非sslを嫌いです。注意:私のWebサーバーはWindows 10でWamp64であるため、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>
2
James Marks