![Один VirtualHost для определенных URL-адресов, другой VirtualHost для всех остальных URL-адресов в Apache](https://rvso.com/image/623651/%D0%9E%D0%B4%D0%B8%D0%BD%20VirtualHost%20%D0%B4%D0%BB%D1%8F%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20URL-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2%2C%20%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9%20VirtualHost%20%D0%B4%D0%BB%D1%8F%20%D0%B2%D1%81%D0%B5%D1%85%20%D0%BE%D1%81%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85%20URL-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2%20%D0%B2%20Apache.png)
Можно ли настроить 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-адреса в свое приложение и позволить ему с этим разобраться.