На 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