У меня есть приложение, работающее на порту 8080 на tomcat. И оно отлично работает с этой конфигурацией VirtualHost:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html
ServerName www.subdomain.domain.com
ServerAlias www.subdomain.domain.com *.subdomain.domain.com
ErrorLog /var/log/apache2/subdomain.d/subdomain_er.log
CustomLog /var/log/apache2/subdomain.d/subdomain_requests.log custom
Redirect / https://subdomain.domain.es
</VirtualHost>
Теперь у меня есть новый сервер и новое приложение, которое фильтрует «поддомен» и загружает разные HTML-файлы и разные таблицы стилей в зависимости от имени поддомена (поддомены создаются разными компаниями, которые определяют свои собственные стили).
Можно ли получить имя поддомена и перенаправить на тот же поддомен с помощью https? Что-то вроде ServerName *.domain.com и перенаправить на поддомен (*.domain.com)? Сохранить его в переменной?
Я прошел через макрос, но ему нужно передать параметры. Я не знаю, какие параметры будут введены в запрос, это может быть company1, может быть company2...
решение1
Вы можете использоватьПереписатьмодуль Apache.
Сначала убедитесь, что он включен в Ubuntu, с помощью следующей команды:
sudo a2enmod rewrite
Если вы добавите следующую конфигурацию к своему виртуальному хосту, любой поддомен domain.com
будет перенаправлен на поддомен domain.es
.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$
RewriteRule ^/(.*)$ https://%1.domain.es/$1 [R=301,L]
Объяснение:
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$
Это условие будет проверять, соответствует ли хост шаблону *.domain.com, и сохранять то, что было сопоставлено
(.+)
(т. е. поддомен). Например, шаблонdomain.com
не будет соответствовать, в то время как следующие шаблоны будут соответствовать:dan.domain.com
www.dan.domain.com
RewriteRule ^/(.*)$ https://%1.domain.es/$1 [R=301,L]
Это правило предписывает Apache перенаправлять на поддомен
domain.es
.%1
содержит значение, совпадающее с предыдущейRewriteCond
директивой. В то время как$1
содержит значение, совпадающее с этой директивой, поэтому вы можете сохранить путь как есть и не перенаправлять в корень домена.
Примеры:
dan.domain.com
перенаправит наhttps://dan.domain.es
www.dan.domain.com
перенаправит наhttps://www.dan.domain.es
dan.domain.com/example
перенаправит наhttps://dan.domain.es/example
www.dan.domain.com/example
перенаправит наhttps://www.dan.domain.es/example