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

Как правильно создавать виртуальные каталоги в Apache без использования символических ссылок?

Я прихожу из IIS, и настраивать там виртуальные каталоги очень легко. Вы просто щелкаете правой кнопкой мыши и добавляете «виртуальный каталог», указывающий на любой путь, который вам нравится. Этот относительный путь отображается в браузере при просмотре сайта.

Как сделать то же самое с Apache? Символические ссылки меня пугают, потому что каскадное удаление выполняется. Есть ли лучший способ создания виртуальных каталогов в Apache? Я использую MAMP для Mac, который использует apache2.

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

Alias /virtual-dir /var/www/foo

Дополнительно, rm -r не пересекает символические ссылки и не будет проходить через них.

Если это защищенный сервер, каталог «Псевдоним» также должен быть указан в конфигурации VirtualHost 443.

<VirtualHost *:443>
...
Alias /virtual-dir /var/www/foo
</VirtualHost>

Если вы указываете нескольким доменам один и тот же общедоступный html-каталог, а фактическое содержимое находится за пределами общедоступного html (веб-корня), вы можете сделать это в два этапа:

1) перепишите каталог для каждого домена, например

<VirtualHost 127.0.0.1:80>
  ServerName host_one.ca
   RewriteEngine On
    RewriteRule "/?images(.*)" "/www/shared/host_one/images/$1" [NC]
</VirtualHost>
<VirtualHost 127.0.0.1:80>
  ServerName host_two.ca
   RewriteEngine On
    RewriteRule "/?images(.*)" "/www/shared/host_two/images/$1"
</VirtualHost>

2) Затем добавьте символические ссылки (как вариант, псевдоним)

ln -s /shared/host_one/images /www/html/images/host_one
ln -s /shared/host_two/images /www/html/images/host_two

Просто будь осторожен. Доступ к изображениям host_two можно получить через host_one: domain_one.ca/images/host_two/{filename}

Если вы не добавите дополнительные правила, которые НЕ будут удалены в текущем каталоге хоста. Для VirtualHost host_one (я сделал не подтвердите, работает ли это правило):

    # prevent showing content from other hosts
    RewriteRule "/?images/!(host_one/.*)" /404 [NC,L]