使用Apache,如何将站点的子文件夹重定向到子域,但是将该子文件夹之外的所有内容重定向到主域?

时间:2014-08-19 19:03:39

标签: apache .htaccess mod-rewrite redirect

我使用vhosts在两个不同的子域上运行Apache的同一个网站。

www.vhost1.com

www.vhost2.com

每当有人访问www.vhost1.com上的特定子文件夹时,我都希望将用户重定向到www.vhost2.com上的同一子文件夹。

实施例: 用户访问www.vhost1.com/my-special-folder 用户应重定向到www.vhost2.com/my-special-folder

每当有人在www.vhost2.com上并访问除该子文件夹以外的任何内容时,我希望将用户重定向到www.vhost1.com/any-other-url

实施例: 用户访问www.vhost2.com/any-other-url 用户应重定向到www.vhost1.com/any-other-url

此外,如果用户访问www.vhost2.com(没有路径),则应将用户重定向到www.vhost1.com

实施例: 用户访问www.vhost2.com 用户应重定向到www.vhost1.com

我已经尝试了几种不同的Apache重定向规则,并且已经有几种方案可以使用,但我无法让它们全部同时工作。

由于服务器配置,我必须使用.htaccess文件执行重定向。

Apache规则应该是什么?

1 个答案:

答案 0 :(得分:2)

将此规则放在两个域的root .htaccess中:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?vhost1\.com$ [NC]
RewriteRule ^(my-special-folder)(/.*)?$ http://www.vhost2.com/$1$2 [L,NC,NE.R=302]

RewriteCond %{HTTP_HOST} ^(www\.)?vhost2\.com$ [NC]
RewriteRule ^((?!my-special-folder/).*)$ http://www.vhost1.com/$1 [L,NC,NE,R=302]