我正在尝试使用CodeIgniter创build一个站点。 我将从该服务器提供多个域,我正在尝试将www.example1.com的HTTP请求与www.example2.com的HTTP请求分开,然后将它们redirect到正确的应用程序文件夹。
说这是我的目录结构:
所以这个请求
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中有不同的路径,则可以有多种选择:
物理创建文件夹,不做进一步的修改
物理地创建一个链接(指向主虚拟主机根文件夹的库)到文件夹中,并使用Virtual Host的FollowSymLinks选项
在VirtualHost中使用Alias指令
Alias /gallery /
使用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。
这实际上是两个问题:
如何使www.example1.com和www.example2.com不同? 这个答案是VirtualHost指令。
如何让/ gallery指向example1? 这是通过Alias指令完成的。