将codeigniter配置为仅在我的域下运行

时间:2014-10-29 19:16:30

标签: php apache codeigniter dns

我在linux服务器和指向ip的域上有一个特定的ip地址。 我设置了一个codeigniter应用程序,过了一会儿,我意识到至少有几个域(不是我的)也指向我的IP地址。 当域不是我拥有的域时,我需要停止为页面提供服务的codeigniter。 有一个干净的解决方案吗?也许是url-library的东西?我想知道在这种情况下是否有最好的做法。但也许最佳实践需要在其他方面停止其他域名?在apache config或htaccess中有类似的东西吗?

2 个答案:

答案 0 :(得分:1)

实现这一目标的良好做法是使用虚拟主机。如果你之前从未使用过apache vhosts,那么你最好先阅读一篇关于它的指南。

顺便说一下,为了正确区分指向您服务器的域名,您应该做的是下一步:

假设您的域名是www.mydomain.com,而您的网站位于/ var / www / vhosts / myproject /

首先,转到apache2.conf文件并添加以下行:

Include sites-enabled/

您应该在apache配置上启用虚拟主机,然后在/ etc / apache2 / sites-available下创建一个www.mydomain.com配置文件。它应该是这样的:

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /var/www/vhosts/myproject
ServerName www.mydomain.com
</VirtualHost>

然后运行:

a2ensite www.mydomain.com

这将在启用了该配置文件的站点中创建符号链接。

然后重启服务。

提示:我不知道codeigniter的具体行为。在www.mydomain.com文件中声明DocumentRoot时,必须指向包含项目的index.php文件的目录。 I:E。在FuelPHP中是public /目录,所以,如果你正在使用Fuel,你应该写:

DocumentRoot /var/www/vhosts/myproject/public/

因此请特别检查您是否指向了codeigniter前端控制器。

对指向您服务器的每个其他域重复此操作,其中包含sites-available下的特定配置文件。

希望这有帮助!

答案 1 :(得分:1)

在一个IP上指向多个域是一种常见情况。您只需要确保您的apache配置已设置VirtualHost以处理您的域而不是其他人。

如果您担心主机上有人将其apache配置设置为指向您的CI目录,您可以尝试在index.php文件中执行以下操作:

<?php

if ($_SERVER['HTTP_HOST'] != 'YOUR DOMAIN')
{
   // redirect, die, etc
}

作为旁边(编辑):

浏览器在发出请求时会发送“Host:”标头。这意味着它将转到IP地址,但服务器在那里读取“Host”标头并将其发送到正确的虚拟主机(在apache中,这将基于ServerName)。因此,与您共享主机的人可能可以设置他们的apache配置以指向您的CI安装,但这可能是唯一会出现问题的情况。移动到您不与任何人共享的您自己的主机,该方案也将被删除。