如何使用Apache将目录重定向到另一个域名?

4
我有一个Apache服务器,上面有两个域名(通过VirtualHost实现)。
文件设置如下:/example1/example2/
example1www.example1.com的根目录
example2www.example2.com的根目录
我希望www.example1.com/example2/<whatever else>重定向到www.example2.com/<whatever else>
我可以访问主Apache配置文件。 有什么提示可以做到这一点吗? 我对配置Apache不太熟悉,所以任何解释都将非常感激。
其他与此相关的问题缺乏解释,因此我觉得我必须发布自己的问题。
2个回答

6
您可以使用.htaccess文件快速实现此操作。在www.example1.com/example2/中,您需要创建此.htaccess文件。
<VirtualHost *:80>
    ...
    <Directory /path/to/vhost/>
      RewriteEngine on
      RewriteBase /example2/
      RewriteRule ^(.*)$ http://www.example2.com/$1 [R=301]
    </Directory>
</VirtualHost>

这假定你想要重定向为301,并且example2文件夹已设置AllowOverride All
这个规则使用正则表达式来捕获传入的URL,不包括example2部分,然后将其附加到重写的URL中。方括号中的R告诉Apache使用Location头将URL重写。=301告诉Apache使用301永久重定向头。

如果可以的话,我宁愿不使用 .htaccess 文件,那么如何将此放入主配置文件中呢?另外,这是如何工作的? - Yoshiyahu
好的,在做了一些研究之后,RewriteEngine等应该在<Directory "/example1/example2/">中。 此外,正则表达式是无效的。问号“?”使其失效。现在,我只能得到example2.com的重定向循环。 - Yoshiyahu
一个无限循环?你把这个加到了两个虚拟主机里吗?甚至是example2的虚拟主机? - Chris Henry
啊,要么我没有注意到<VirtualHost>中的<Directory>,要么是你在我看到它之后添加了它。好吧,因为你指引我正确的方向,我已经把它全部搞清楚了。与其将<Directory>放在<VirtualHost>中,我使用了RewriteCond %{HTTP_HOST} ^(www\.)?example1.com。虽然我相信将其放在<VirtualHost>中也完全没问题。 - Yoshiyahu
是的,我之后添加了它。;) 很高兴能帮助! - Chris Henry

5
如果您启用了mod_alias,您可以使用重定向指令:
<VirtualHost *:80>
    ServerName example1.com
    Redirect 301 /example2 http://www.example2.com
</VirtualHost>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接