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

Автоматические определения псевдонимов Apache

У меня есть папка с сайтами: /var/www

У меня есть домен: example.com

Я хочу написать правило в моем httpd.conf который установит псевдоним для каждого сайта в /var/www.

Например: /var/www/hello/public можно получить через example.com/hello.

На данный момент я просто вручную пишу определения псевдонимов для каждого сайта: Alias /hello "/var/www/hello/public/"

Самым простым решением было бы использовать mod_vhost_alias вместо. Это не делает именно то, что вы описали, но это очень близко.

  1. включить vhost_alias_module используя любую технику, которую предпочитает ваш дистрибутив (a2enmod vhost_alias в дистрибутивах на основе Debian).
  2. Добавьте эти директивы в httpd.conf:

    UseCanonicalName Off
    VirtualDocumentRoot /var/www/%1/public
    
  3. Создайте запись DNS с подстановочными знаками для example.com, чтобы любой поддомен example.com направлялся на ваш сервер.

Теперь при доступе к hello.example.com будет загружен сайт, расположенный в /var/www/hello/public.

В качестве альтернативы, как упоминал Габор, вы можете использовать mod_rewrite. Решение, которое я собираюсь описать, предполагает, что у вас нет другого контента на example.com.

  1. включить mod_rewrite используя любой механизм, который предпочитает ваш дистрибутив (a2enmod rewrite в дистрибутивах на основе Debian).
  2. Добавьте эти директивы в VirtualHost для example.com:

    RewriteEngine On
    RewriteRule ^([^/]+)(.*) /var/www/$1/public/$2
    

Это перепишет запрос "example.com/hello/steve" на /var/www/hello/public/steve.

Создайте vhost для своего домена и webroot. Напишите правило перезаписи вместо псевдонима.