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

Один 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-адресов?

решение1

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

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

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

решение2

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

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

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

решение3

Виртуальные хосты предназначены для обработки доменной части запроса, что позволяет размещать несколько доменов на одном сервере.

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

Связанный контент