我已经在没有解决方案的情况下对这个问题做了一些研究。
设置如下:多个域名称为www.domainA.com和www.domainB.com。 两个域都映射到LAMP服务器上的相同主机文件夹。我希望该文件夹中的index.php文件“知道”哪个域正在访问文件并从SQL改变内容。即加载特定于该域的不同客户端ID。
我调查了$_SERVER['REMOTE_HOST']
和$_SERVER['HTTP_REFERRER']
后者已明确表示不可靠。我正在寻求一个足够强大的解决方案。
.htaccess
不会这样做(我不会想到?)我正在考虑将域DNS IP作为行动的坚实来源。非常感谢一些指导。
更新:已经提出了一些解决方案 - 我希望有一个包含所有预期域的SQL表。 TABLE客户端('id_client','client_name','client_url')并查询此表,将'id_client'返回给$变量。
如果$ _SERVER ['HTTP_HOST']与数据库中的client_url匹配,则返回相应的id_client。 .htaccess解决方案 - 无论多么优雅 - 都需要不断更新文件。我更愿意,尽可能在php和数据库中保存解决方案。
$ _SERVER ['HTTP_HOST']在什么情况下失败?
答案 0 :(得分:2)
你可以用.htaccess
来实现这一点用modrewrite重写domaina.com到index.php?client_id = a
以下是从http://corz.org/serv/tricks/htaccess2.php
中提取的代码示例#two domains served from one root..
RewriteCond %{HTTP_HOST} domain-one.com
RewriteCond %{REQUEST_URI} !^/one
RewriteRule ^(.*)$ one/$1 [L]
RewriteCond %{HTTP_HOST} domain-two.com
RewriteCond %{REQUEST_URI} !^two
RewriteRule ^(.*)$ two/$1 [L]
只需修改正则表达式和路由以适合您的情况。
答案 1 :(得分:1)
如果您希望在代码中执行此操作,那么最简单的方法是检查$_SERVER['HTTP_HOST']
,它会返回用户使用您访问您网站的主机名。例如,如果我访问 http://www.exampleA.com/ ,那么$_SERVER['HTTP_HOST']
将返回www.exampleA.com
。
然后,为了进行路由,这是一个简单的例子,根据已知主机名列表检查主机,并根据使用变量的client_id分配。
使用像Zend Framework这样的框架可能会稍微容易一些,因为它已经使用Zend_Controller_Router_Route_Hostname内置了这个功能,但您也应该能够使用独立的PHP相对简单地实现它。
答案 2 :(得分:0)
这可以分两步完成。首先在每个域的vhost配置中使用别名,您可以指向它们,以便所有请求都转到:
托管文件夹 /controller.php/Domain/requested文件夹/页
为domainA完成此操作的vhosts文件可能如下所示:
<VirtualHost *:80>
ServerName domainA.com
DirectoryIndex index.html index.htm index.php
DocumentRoot /var/www/
Alias /pages /var/www/pages/control.php/DomainA
</VirtualHost>
然后control.php将接收所有请求,Apache将在control.php之后发送变量$ _SERVER [&#39; PATH_INFO&#39;]。例如,如果用户访问www.DomainA.com/folder1/pageC.php,那么$ _SERVER [&#39; PATH_INFO&#39;]将是&#39; /DomainA/folder1/pageC.php'。请注意,必须将动态页面分成自己的文件夹才能使此解决方案正常工作,否则将通过control.php引导静态内容请求,从而导致问题。如果仔细完成,该目录结构将对用户不可见。
对于php页面,Control.php可能看起来像这样:
<?php
if (isset($_SERVER['PATH_INFO']))
{
$path = explode('/', substr($_SERVER['PATH_INFO'], 1)); //substr removes leading slash
$domain = array_shift($path);
$page = implode('/', $path); //Note: you will want to verify that there is a page name and append 'index.php' if there is not.
}
require_once $page;
?>