У меня есть следующие виртуальные хосты:
<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]