我在linux服务器和指向ip的域上有一个特定的ip地址。 我设置了一个codeigniter应用程序,过了一会儿,我意识到至少有几个域(不是我的)也指向我的IP地址。 当域不是我拥有的域时,我需要停止为页面提供服务的codeigniter。 有一个干净的解决方案吗?也许是url-library的东西?我想知道在这种情况下是否有最好的做法。但也许最佳实践需要在其他方面停止其他域名?在apache config或htaccess中有类似的东西吗?
答案 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安装,但这可能是唯一会出现问题的情况。移动到您不与任何人共享的您自己的主机,该方案也将被删除。