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

Добавить субдомен www в мой виртуальный хост Wildcard

На моем локальном сервере разработки я установил тестовые сайты с таким доменом projectName.dev

Используя настройку ниже в моем конфигурационном файле Apache ...

NameVirtualHost *:80

<VirtualHost *:80>
   VirtualDocumentRoot  E:/Server/htdocs/projects/%1/www
   ServerAlias *.dev
</VirtualHost>

Это позволяет мне получить доступ projectName.dev в браузере, и он загрузит файлы из E:/Server/htdocs/projects/projectName/www/

Я хотел бы изменить это так, чтобы я мог также получить доступ к тем же папкам, если использую поддомен www так что в моем примере projectName.dev и www.projectName.dev загрузит те же файлы.

Может ли кто-нибудь помочь мне в этом? Я не очень хорошо понимаю документацию

Вы можете попробовать следующее

NameVirtualHost *:80

<VirtualHost *:80>
   VirtualDocumentRoot  E:/Server/htdocs/projects/%-2/www
   ServerName staging.dev
   ServerAlias *.dev www.*.dev
</VirtualHost>

Вы можете использовать% -2, чтобы всегда получать имя «проекта». % -2 дает вам вторую часть URL-адреса с конца. Например, если URL-адрес будет http://project1.dev/ тогда корневой каталог будет E: / Server / htdocs / projects / project1 / www

Ответ ALex_hha правильный, проблема в% 1 в VirtualDocumentRoot. который заменяется используемым именем хоста. использование нескольких вариантов подстановочных знаков и VirtualDocumentRoot всегда сложно.

У вас есть 2 решения:

  1. заменить% 1 my a жестко запрограммированный projectName.dev.
    Если у вас много проектов, вам нужно будет создать конфигурацию виртуального хоста для каждого проекта, но только для одного - хорошее решение.
  2. создать 2 конфига:

    # www.project.dev format 
    <VirtualHost *:80>
      VirtualDocumentRoot  E:/Server/htdocs/projects/%2+/www
      ServerName www.*.dev
    </VirtualHost>
    
    # project.dev format
    <VirtualHost *:80>
      VirtualDocumentRoot  E:/Server/htdocs/projects/%1/www
      ServerName *.dev
    </VirtualHost>
    

% 2 + говорит, что вы хотите получить вторую и прямую часть имени хоста. Проверить Справочная страница mod_vhost для получения дополнительной информации

Вы не используете unix, но в unix вы также можете сделать символическую ссылку с имен www на имена проектов:

cd /srv/
for i in *; do 
   # bypass if not a directory
   if [ ! -d "$i" ]; then continue; fi
   # bypass if already created
   if [ -e "www.$i" ]; then continue ; fi
   # bypass if already a www
   echo $i | fgrep -q "www" && continue
   ln -s $i www.$i
done

Таким образом, имя проекта и www.projectname указывают на одно и то же место.