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

Разрешить локальный поддомен на apache для путей в каталоге пользователя

На Apache 2.2.x я активировал mod_userdir. Я использовал настройку по умолчанию, так что http://localhost/~name/ будет связан с ~name/public_html/ и путь в public_html, например ~name/public_html/mySite можно добраться через http://localhost/~name/mySite.

Как я могу достичь того же пути, http://mySite.name.localhost/? Мне не нужен ручной подход, как это предлагается в других вопросах по научной фантастике (например, Apache: настройка локального тестового сервера с поддоменами), а скорее хотите, чтобы все доступные пути автоматически отображались на соответствующий URL.

Я думаю, нужно будет предпринять несколько шагов: Измените конфигурацию mod_userdir, чтобы поддомен localhost был связан со всеми доступными именами пользователей на машине. Второй шаг может включать использование mod_rewrite, чтобы поддомен мог быть сопоставлен с путем в ~ name / public_html ...

Что бы вы предпочли?

РЕДАКТИРОВАТЬ:

Решение отмечено флажком. Я сделал небольшие изменения для удовлетворения особых требований и добавил комментарии:

RewriteEngine on
# check, if not redirected yet
RewriteCond %{ENV:REDIRECT_STATUS} ^$
# look for URLS like 'subdir.username.localhost'
RewriteCond %{HTTP_HOST} (.+)\.([^.]+)\.localhost$
# check if /home/username/public_html/subdir is a directory or symbolic link
RewriteCond /home/%2/public_html/%1 -d [OR]
RewriteCond /home/%2/public_html/%1 -l
# rewrite to default target
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
# rewrite to /home/username/public_html/subdir
RewriteRule (.+)\.([^.]+)\.localhost(?::\d+)?(.*) /home/$2/public_html/$1$3 [L]

Несколько недель назад у меня была аналогичная потребность. Я решил это с помощью mod_rewrite, поместив это в мое определение vhost по умолчанию:

RewriteEngine on
 # look for URLS like 'subdir.username.localhost'
 RewriteCond %{ENV:REDIRECT_STATUS} ^$
 RewriteCond %{HTTP_HOST} ([^.]+)\.([^.]+)\.localhost$
 RewriteCond /home/%2/public_html/%1 -d
 RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
 RewriteRule ([^.]+)\.([^.]+)\.localhost(?::\d+)?(.*) /home/$2/public_html/$1$3 [L]

Больше информации можно найти на https://gist.github.com/744971, включая получение username.localhost для разрешения в / home / username / public_html