複数のサブドメインを持つ Apache AliasMatch

複数のサブドメインを持つ Apache AliasMatch

次の仮想ホストがあります:

<VirtualHost *:443>
  ServerName article.example.com
  AliasMatch "^/(.*)" "/var/www/html/article.php"
 </VirtualHost>
 <VirtualHost *:443>
  ServerName company.example.com
  AliasMatch "^/(.*)" "/var/www/html/company.php"
 </VirtualHost>

次のようにすべてを 1 つの仮想ホストの下に配置したいと思います。

 <VirtualHost *:443>
  ServerName example.com
  ServerAlias *.example.*
  AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"
 </VirtualHost>

これは可能ですか? mod rewrite を使用する必要がありますか? URL を変更せずに、特定のサブドメインをサーバー上の関連ファイルにマップしたいです。article.example.com/test-articleにマップしたいですarticle.php

答え1

AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"

ディレクティブAliasMatchは、要求されたURLパス(最初の例のように)と照合します。ホスト名(ここでやろうとしているように)、このようなものは一致しません。

当然の選択は、あなたが提案したように、mod_rewrite です。例えば:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(article|company)\.
RewriteRule ^ /var/www/html/%1.php [L]

%1バックリファレンスに、前のキャプチャされたサブパターンからの一致が含まれている場合条件パターン

/var/www/htmlがドキュメントルートである場合は、代替文字列を、絶対ファイル パスではなくドキュメント ルート相対 URL パスに書き換えます。つまり、単に/%1.php.

より汎用的にして、ドキュメント ルートにファイルとして存在するサブドメインのリクエストを書き換えることもできます.php。例:

RewriteCond %{HTTP_HOST} ^([^.]+)\.example
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]

関連情報