Назад | Перейти на главную страницу

Как реализовать поддомены для пользователей в Apache

Я создаю платформу, где основным доменом является example.com. Сервер использует CentOS 7 с Apache 2.

URL-адрес моих пользователей будет username.example.com, который фактически загружает содержимое из example.com/username, так что:

и т.д. Что было бы лучшим подходом для этой настройки? У меня есть полный доступ к файлу конфигурации httpd.conf.

В простом случае очень просто использовать mod_rewrite.

RewriteEngine on
RewriteCond "%{HTTP_HOST}" "^([^.]+)\.example\.com$" [NC,NV]
RewriteRule "^(.*)$" "%{REQUEST_SCHEME}://%{HTTP_HOST}/%1$1" [L]

Получить первую точку невозможно, так как вы никогда не можете запросить только имя хоста.
Если вы набираете его таким образом, в браузере или на клиенте он всегда получает добавление /, поскольку протокол HTTP требует некоторого URI для запроса с сервера, который не может быть пустой строкой.

В зависимости от ваших конкретных требований он может стать более сложным.

Например, приведенное выше решение не преобразует регистр полученного заголовка хоста, поэтому результирующий URI имеет имя пользователя в том же регистре, что и запросчик, отправленный в заголовке хоста.
Он игнорирует регистр example.com, поскольку имена DNS по умолчанию не обрабатываются с учетом регистра. Но результирующее имя пользователя может быть MJohnson, Mjohnson или mJOHNSON, однако отправляется заголовок хоста, и это обычно разные строки.)
Так, например, чтобы всегда указывать имя пользователя в исходном URL-адресе в нижнем регистре, вы можете заменить строку RewriteCond следующим образом:

RewriteCond expr "tolower(%{HTTP_HOST}) =~ /^([^.]+)\.example\.com(:\d+)?$/" [NV]