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

Один VirtualHost для определенных URL-адресов, другой VirtualHost для всех остальных URL-адресов в Apache

Можно ли настроить Apache так, чтобы разные виртуальные хосты слушали один и тот же IP-адрес, один и тот же порт, так что определенные пути (не полный домен, только локальный путь) будут направлены на один виртуальный хост, а другие будут по умолчанию на другой ?

Например:

#All requests to www.mysite.com/special-url go here

<VirtualHost /special-url:80>
  DefaultType application/x-httpd-php
  ServerName server1
  Document Root "/home/me/server1"
  <Directory "/home/me/server1">
    AllowOverride None
    Order allow, deny
    allow from all
  </Directory>
</VirtualHost>

#All other requests go here

<VirtualHost *:80>
  DefaultType application/x-httpd-php
  ServerName server1
  Document Root "/home/me/server2"
  <Directory "/home/me/server2">
    AllowOverride None
    Order allow, deny
    allow from all
  </Directory>
</VirtualHost>

Эта конфигурация сервера не работает, как и добавление комбинаций подстановочных знаков к первому VirtualHost тег (например, VirtualHost */special-url:80). Вместо этого, когда я запускаю это, Apache направляет запросы на /special-url к /home/me/server1. Но если я ищу /foo он все равно будет искать это в server1 и вернуться 404 даже если есть каталог с именем foo в /home/me/server2.

Есть ли способ иметь один VirtualHost только для определенных URL-адресов и другой VirtualHost для всех остальных URL-адресов?

Это не так. Виртуальный хост основан либо на IP-адресе, либо на имени хоста, а не на пути. Но есть еще несколько вещей, которые вы можете сделать для достижения той же цели:

  • Если server1 виртуальный хост имеет отдельное имя хоста, у вас может быть перенаправление
  • Если все, что вам нужно, - это обслуживать контент с другого пути для этого URL-адреса, вы можете использовать AliasMatch нанести на карту этот путь
  • Вы могли бы использовать mod_rewrite выполнить перезапись URL в соответствии с вашей спецификацией

Я не могу быть более конкретным, не зная больше о том, чего именно вы хотите достичь. Но я верю документация Apache по отображению URL-адресов в файловую систему даст вам хорошую отправную точку.

Похоже, это может быть работа для прокси-модуля Apache.

Ознакомьтесь с директивой ProxyPass:

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass

Virtualhosts предназначены для обработки доменной части запроса, чтобы вы могли разместить несколько доменов на одном сервере.

вы могли бы что-то сделать с псевдонимом или переписать. или вы можете встроить разные URL-адреса в свое приложение и позволить ему разобраться с этим.