Я разрабатываю сайт, который будет использовать любую заданную [вариацию] части имени поддомена (то есть часть с префиксом перед именем хоста и, необязательно, часть TLD). Я бы предположил, что на производстве это было бы несложно - убедитесь, что DNS для части доменного имени второго уровня указывает на IP-адрес, настройте виртуальный хост Apache2 для прослушивания этого (или любого) IP-порта 80 и просто используйте PHP для принятия решений на основе заголовка запроса "Host".
Однако в настоящее время это сайт localhost, поскольку я разрабатываю его с помощью своей рабочей станции, поэтому сначала я пропатчил / etc / hosts, чтобы включить:
127.0.0.1 mydomain
Я использовал только одну часть имени (возможно, собственный TLD), чтобы не мешать доменным именам в Интернете. Затем я установил директиву VirtualHost для Apache 2.2, например:
<VirtualHost *:80>
ServerName mydomain
Но теперь я вижу, что, например. example.mydomain не указывает на localhost, что означает, что добавление / etc / hosts неэффективно для «something.mydomain». Похоже, что правила взяты дословно, и я также проверил, что подстановочные знаки, такие как * .mydomain, не разрешены.
Есть ли решение для этого?
Если вы работаете в Linux (и я предполагаю, что это так, поскольку вы упомянули / etc / hosts), вы можете попробовать dnsmasq для этого. Иногда я использую его для быстрого тестирования и переопределения локального DNS.
Необходимые шаги:
Настройте вашу станцию на использование dnsmasq для разрешения DNS.
редактировать /etc/resolv.conf
и положи:
nameserver 127.0.0.1
Побочным эффектом этого является локальное кеширование DNS, что обычно является еще одним плюсом (хотя следует помнить об этом).
Изменить dnsmasq конфигурация.
редактировать /etc/dnsmasq.conf
:
address=/example.com/127.0.0.1
Вам нужно разместить здесь корневой домен, он должен разрешить все поддомены в localhost сюда.
Начать сначала dnsmasq
Проверить с host example.com
и host subdomain.example.com
. Оба должны указывать на localhost.