3

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

说这是我的目录结构:

  • 系统
    • 应用
      • 示例1
      • 示例2

所以这个要求

www.example1.com/gallery/

然后将被重定向到 exmaple1 文件夹。

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

我查看了 Apache 文档,但我无处可去。如果您需要更多信息,请告诉我。

4

3 回答 3

3

您需要的称为VirtualHost以使 www.example1.com 和 www.exaplme2.com 分别指向文件系统中的不同文件夹。

如果您还希望在 URI 中使用不同的路径来提供主要内容,您有多种选择:

  1. 物理创建文件夹,无需进一步更改

  2. 物理地创建一个指向该文件夹的链接(名为 gallery 指向主虚拟主机根文件夹),并为 VirtualHost 使用FollowSymLinks选项

  3. 在 VirtualHost 中使用Alias指令

    Alias /gallery /
    
  4. 使用 mod_rewrite

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

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

VirtualHost 文档中的片段:

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

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

笔记

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

服务器配置

# 确保 Apache 监听 80 端口
听 80

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

<虚拟主机 *:80>
DocumentRoot /www/example1
服务器名称 www.example.com

# 这里的其他指令

</虚拟主机>

<虚拟主机 *:80>
DocumentRoot /www/example2
服务器名称 www.example.org

# 这里的其他指令

</虚拟主机>

星号匹配所有地址,因此主服务器不提供任何请求。
由于 www.example.com 在配置文件中排在第一位,
它具有最高优先级,可以视为默认或主要
服务器。这意味着如果收到不匹配的请求
指定的 ServerName 指令之一,它将由此服务
第一个虚拟主机。
于 2009-06-22T05:47:10.030 回答
1

这真的是两个问题:

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

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

于 2009-06-22T05:45:53.183 回答
1

使用 VirtualHost(和 Alias,Rewrite)是主要的答案,但如果您认为您将使用相同的设置添加/删除其他主机,那么我会考虑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 示例1

这将设置 www.example1.com 以使用配置的目录作为根目录以及配置的日志记录目录。

于 2009-06-22T14:10:01.753 回答