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>

Я бы хотел разместить все на одном виртуальном хосте следующим образом:

 <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обратная ссылка содержит совпадение из захваченного подшаблона в предыдущемCondPattern.

Если /var/www/htmlэто корень документа, то его можно исключить иззаменастрока, перезаписывая URL-путь относительно корня документа вместо абсолютного пути к файлу. т. е. просто /%1.php.

Вы можете сделать его более общим и переписать запрос для любого поддомена, где этот поддомен существует как .phpфайл в корне документа. Например:

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

Связанный контент