【问题标题】:How do I make Apache know which app directory to use for different domains?如何让 Apache 知道哪个应用程序目录用于不同的域?
【发布时间】:2010-11-04 18:21:42
【问题描述】:

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

说这是我的目录结构:

  • 系统
    • 申请
      • 例子1
      • 例子2

所以这个请求

www.example1.com/gallery/

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

有没有人有任何代码示例可以做到这一点?显然你需要使用 ReWrite 模块...

我查看了 Apache 文档,但找不到任何地方。如果您需要这方面的更多信息,请告诉我。

【问题讨论】:

标签: apache mod-rewrite codeigniter virtualhost


【解决方案1】:

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

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

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

  2. 以物理方式创建一个指向该文件夹的链接(指向主虚拟主机根文件夹的命名库)并为虚拟主机使用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 DocumentRoot /www/example1 服务器名称 www.example.com # 这里的其他指令 虚拟主机> DocumentRoot /www/example2 服务器名称 www.example.org # 这里的其他指令 虚拟主机> 星号匹配所有地址,因此主服务器不提供任何请求。 由于 www.example.com 在配置文件中排在第一位, 它具有最高优先级,可以视为默认或主要 服务器。这意味着如果收到不匹配的请求 指定的 ServerName 指令之一,它将由此服务 第一个虚拟主机。

【讨论】:

    【解决方案2】:

    使用 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 使用配置的目录作为根目录以及配置的日志目录。

    【讨论】:

    • 哇。这很酷。我的另一个问题是 Codeigniter 的 assets 文件夹位于 /system/application/example1 文件夹之外。它实际上与位于根目录的系统文件夹处于同一级别。我仍在寻找一种方法来为来自每个域的 img、js 和 css 请求编写指令,并将它们重定向到 assets/example1/js、assets/example1/css、assets/example1/img。
    【解决方案3】:

    这真的是两个问题:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多