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

mod_rewrite для перенаправления на другой виртуальный хост

Имя хоста, на которое я хочу перенаправить, выглядит так:

<VirtualHost *:80>
       ServerName my.dav.hostname.com
       ErrorLog /var/log/open-xchange/dav-err.log
       TransferLog /var/log/open-xchange/dav-access.log
       <Proxy />
               Order allow,deny
               Allow from all
       </Proxy>
       ProxyPass / ajp://localhost:8009/servlet/dav/ smax=0 ttl=60 retry=5
</VirtualHost>

Я хочу сделать что-то вроде того, что если кто-то перейдет по URL-адресу my.hostname.com/dav, я хочу, чтобы он был переписан на my.dav.hostname.com .. Если клиент переходит на URL-адрес, отличный от /dav, ему следует не быть перенаправленным.

<VirtualHost *:80>
       ServerName my.hostname.com
       ErrorLog /var/log/open-xchange/dav-err.log
       TransferLog /var/log/open-xchange/dav-access.log
       .. 
       ..
</VirtualHost>

Я не знаю, как мне поступить.

Что-то вроде этого не работает:

RewriteEngine on
RewriteRule /servlet/webdav.infostore http://my.dav.hostname.com [L,NE,QSA]

Поскольку он фактически перенаправляет на my.dav.hostname.com, что мне не нужно. Я хочу, чтобы apache прозрачно делал это за меня.

Если вы хотите, чтобы apache делал это прозрачно (т.е. URL-адрес в браузере не должен изменяться), вы можете просто смонтировать свой сервлет DAV на другом сервере:

ProxyPass /dav/ ajp://localhost:8009/servlet/dav/ smax=0 ttl=60 retry=5

Это должно работать:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^my.dav.domain.com [NC]
RewriteRule ^/dav/(.*)$ http://my.dav.domain.com/$1 [R=301,NC]

Лично я бы не стал использовать вашу структуру поддоменов. Лучше использовать dav.subdomain.domain.com над subdomain.dav.domain.com.