2009-04-22 47 views
5

(我知道这是不是一个编程问题本身,但它涉及的正则表达式,所以至少是边缘...)Apache和mod_rewrite的:重定向域子目录

的设置:

Apache 2.0与Windows上的mod_rewrite。有两个域,我们称它们为domain1.example和domain2.example。我想在同一台服务器(“server1”)上托管两个域,所以我将它们指向相同的IP地址。

现在,如果用户在他的浏览器中键入“domain2.example”,我希望他在服务器上的子目录**中结束,但保留他输入的域完整(“domain2.example/domain2 /” )。当然,重定向必须保持该域/目录下的页面上的所有绝对链接和相对链接完好无损。

这可能与mod_rewrite(或Apache虚拟主机或其他方法),我该怎么做?

**在这种情况下,“子目录”实际上不是磁盘上的文件夹,而是使用Apache“Location”指令创建的虚拟文件夹。

谢谢。

回答

2

我不相信你需要使用mod_rewrite,你应该能够像你所建议的那样使用虚拟主机。要做到这一点,你将拥有一个带有servername domain2.example的虚拟主机,它指向你想要的目录。这也将为domain1.example使用ServerAlias指令,因此对此的请求将转到相同的目录。

请参阅ServerAliasDocumentRoot的文档。另外请注意,如果你想让目录显示在URL中,你的将会需要使用mod_rewrite。

3

假设域是独立的,建议的解决方案是虚拟主机。

你可以在apache website找到文档。

+0

请问DocumentRoot指令(在虚拟主机配置部分)工作转发到一个“子目录”,这实际上是一个“位置”,而不是服务器上的物理文件夹? – ObiWanKenobi 2009-04-22 06:25:58

6

我假设你没有访问Apache配置,否则,是的,虚拟主机是你最好的选择。如果你不这样做,但是,这可以放在.htaccess文件和应该做的伎俩:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(.+)\.yourwebsite\.com$ 
RewriteRule ^/(.*)$ /path/to/your/subdomains/%1/$1 [L] 

所以要http://foo.yourwebsite.com/bar的请求会去/path/to/your/subdomains/foo/bar