我想要重定向到的主机名如下:
<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.com
over subdomain.dav.domain.com
。
答案2
如果您希望 apache 透明地执行此操作(即浏览器中的 URL 不能改变),您也可以简单地在其他服务器上安装您的 DAV servlet:
ProxyPass /dav/ ajp://localhost:8009/servlet/dav/ smax=0 ttl=60 retry=5