
次の仮想ホストがあります:
<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]