如何让Apache知道哪个应用程序目录用于不同的域名?

我正在尝试使用CodeIgniter创build一个站点。 我将从该服务器提供多个域,我正在尝试将www.example1.com的HTTP请求与www.example2.com的HTTP请求分开,然后将它们redirect到正确的应用程序文件夹。

说这是我的目录结构:

  • 系统
    • 应用
      • 例1
      • 例题

所以这个请求

www.example1.com/gallery/

然后将被redirect到exmaple1文件夹。

有没有人有这样做的代码示例? 显然你需要使用ReWrite模块…

我环顾了Apache文档,但是我无法find任何地方。 让我知道你是否需要更多的信息。

使用VirtualHost(和别名,重写)是主要的答案,但如果你认为你将使用相同的设置添加/删除其他主机,那么我会考虑mod_macro模块。 这是第三方模块,可以帮助您简化Apache配置,避免复制/粘贴错误。

一个布局简单的例子,定义如下:

<Macro vh80 name> <VirtualHost *:80> DocumentRoot /system/application/$name serverName www.$name.com CustomLog /system/application/$name/logs/access.log virtcommon ErrorLog /system/application/$name/logs/error.log </VirtualHost> </Macro> 

然后当启用一个网站时,使用下面的指令:

使用vh80 example1

这将设置www.example1.com以root用户身份使用配置的目录以及配置的日志记录目录。

你需要的是叫做VirtualHost来使www.example1.com和www.exaplme2.com指向文件系统中的不同文件夹。

如果您另外希望在用于提供主要内容的URI中有不同的路径,则可以有多种选择:

  1. 物理创建文件夹,不做进一步的修改

  2. 物理地创建一个链接(指向主虚拟主机根文件夹的库)到文件夹中,并使用Virtual Host的FollowSymLinks选项

  3. 在VirtualHost中使用Alias指令

     Alias /gallery / 
  4. 使用mod_rewrite

     RewriteRule /gallery/(.*) /$1 [QSA] 

最简单的(CodeIgniter允许)将是选项1或2。

从VirtualHost文档摘录:

在一个IP地址上运行多个基于名称的网站。

您的服务器具有单个IP地址和多个别名(CNAMES) 
指向DNS中的这台机器。 你想运行一个Web服务器 
 www.example.com和www.example.org在这台机器上。

注意

在你的Apache服务器上创建虚拟主机配置 
不会神奇地导致为这些主机创建DNS条目 
名。 您必须在DNS中具有名称,才能解析您的IP 
地址,否则其他人将无法看到您的网站。 
你可以把条目放在你的hosts文件中进行本地测试, 
但是这只能从那些主机的机器上运行 
条目。

服务器配置

 #确保Apache侦听端口80
听80

 #监听所有IP地址上的虚拟主机请求
 NameVirtualHost *:80

 <VirtualHost *:80>
 DocumentRoot / www / example1
 serverName www.example.com

 #其他指令在这里

 </虚拟主机>

 <VirtualHost *:80>
 DocumentRoot / www / example2
 serverName www.example.org

 #其他指令在这里

 </虚拟主机>

星号匹配所有地址,所以主服务器不提供任何请求。 
由于www.example.com是配置文件中的第一个事实, 
它具有最高优先级,可以被视为默认或主要 
服务器。 这意味着如果收到一个不匹配的请求 
指定的serverName指令之一,它将由此服务
第一个VirtualHost。

这实际上是两个问题:

  1. 如何使www.example1.com和www.example2.com不同? 这个答案是VirtualHost指令。

  2. 如何让/ gallery指向example1? 这是通过Alias指令完成的。