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

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

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

  • mjohnson.example.com загружает содержимое с example.com/mjohnson
  • ; mjohnson.example.com/about загружает содержимое с example.com/mjohnson/about
  • jsmith.example.com/ load содержимое с example.com/jsmith/

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

0
задан 7 October 2019 в 13:04
1 ответ

Это - очень простое использование mod_rewrite для простого случая.

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

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

В зависимости от Вас строгие требования это может стать более сложным.

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

RewriteCond expr "tolower(%{HTTP_HOST}) =~ /^([^.]+)\.example\.com(:\d+)?$/" [NV]
0
ответ дан 23 November 2019 в 04:16

Теги

Похожие вопросы