У меня есть настройка ssl с подстановочными знаками на Apache для домена, поэтому я могу создавать любой тип поддомена на лету.
<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName www.domain.com
ServerAlias domain.com *.domain.com
....
</VirtualHost>
Это отлично работает, так как я часто добавляю поддомены, и мне не нужна дополнительная обработка.
Конечно, проблема в том, что теперь любой может перейти на страницу по умолчанию с любым случайным поддоменом. т.е. random.domain.com
Какие у меня есть варианты ограничения доступа только к настроенным субдоменам? Будет ли правило в htaccess жизнеспособным? Что-то вроде того, если это не один из этих текущих поддоменов:
RewriteCond %{HTTP_HOST} !^sub\.domain\.com [NC]
RewriteCond %{HTTP_HOST} !^sub2\.domain\.com [NC]
Предлагаю вам использовать:
<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName www.domain.com
ServerAlias domain.com
ServerAlias sub.domain.com
ServerAlias sub2.domain.com
....
</VirtualHost>
<VirtualHost *:443>
DocumentRoot "/"
ServerName www.domain.com
ServerAlias *.domain.com
<Directory "/">
Deny from all
</Directory>
</VirtualHost>
Почему бы не использовать уже написанный код, а затем добавить строку, которая перезаписывает все запросы для других поддоменов в несуществующий каталог (или перенаправить их на страницу, на которой указано, что веб-сайт, на который они пытались перейти, не существует)?
RewriteCond %{HTTP_HOST} !^sub\.domain\.com [NC]
RewriteCond %{HTTP_HOST} !^sub2\.domain\.com [NC]
RewriteRule (.*) http://dev.domain.com/$1 [R=301,L]
Затем вы можете настроить поддомен dev.domain.com и заставить его возвращать страницу, в которой говорится, что запрошенный поддомен не существует или недоступен, или какой-либо другой текст, который вы хотите отправить обратно запрашивающей стороне.
http://coolestguidesontheplanet.com/redirecting-a-web-folder-directory-to-another-in-htaccess/