mod_rewrite 重定向到不同的虚拟主机

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 能透明地帮我完成这件事。

答案1

这应该有效:

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

不过我个人不会使用你的子域名结构。最好使用dav.subdomain.domain.comover subdomain.dav.domain.com

答案2

如果您希望 apache 透明地执行此操作(即浏览器中的 URL 不能改变),您也可以简单地在其他服务器上安装您的 DAV servlet:

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

相关内容