Несколько доменов для изменения содержимого файлов PHP с общим хостом - PullRequest
2 голосов
/ 21 декабря 2011

Я провел некоторое исследование по этой проблеме без решения и пока.

Настройте следующим образом: несколько доменов, скажем, www.domainA.com и www.domainB.com. Оба домена отображаются в одной и той же папке размещения на сервере LAMP. Я хочу, чтобы файл index.php в этой папке «знал», какой домен обращается к файлам, и отличал содержимое от SQL. То есть загрузить другой идентификатор клиента, специфичный для этого домена.

Я посмотрел на $_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'] завершаются ошибкой?

Ответы [ 3 ]

2 голосов
/ 21 декабря 2011

Вы действительно можете сделать это с помощью .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 голос
/ 21 декабря 2011

Если вы хотите сделать это в своем коде, тогда проще всего проверить $_SERVER['HTTP_HOST'], который возвращает имя хоста, с помощью которого пользователь обращается к вашему сайту. Например, если бы я получил доступ к http://www.exampleA.com/, то $_SERVER['HTTP_HOST'] вернул бы www.exampleA.com.

Затем, чтобы выполнить маршрутизацию, это простой случай проверки хоста по списку известных имен хостов и присвоения client_id на основе этого с использованием переменной.

Возможно, вам будет немного проще использовать фреймворк, такой как Zend Framework , поскольку эта функциональность уже встроена с использованием Zend_Controller_Router_Route_Hostname , но вы также должны иметь возможность реализовать его относительно просто используя только автономный PHP.

0 голосов
/ 21 декабря 2011

Это можно сделать в два этапа.Сначала, используя псевдонимы в конфигурации vhost для каждого домена, вы можете указать их так, чтобы все запросы отправлялись:

папка хостинга / controller.php / Домен / запрошенная папка / страница

Файл vhosts для этого для domainA может выглядеть следующим образом:

<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 отправит переменную $ _SERVER ['PATH_INFO'] со всем после контроля.php.Например, если пользователь заходит на www.DomainA.com/folder1/pageC.php, тогда $ _SERVER ['PATH_INFO'] будет '/DomainA/folder1/pageC.php'.Обратите внимание, что для работы этого решения необходимо, чтобы динамические страницы были разделены на свою собственную папку, иначе запросы на статический контент будут направлены через control.php, что вызовет проблемы.Эта структура каталогов может быть сделана невидимой для пользователя, если все сделано аккуратно.

Control.php может выглядеть так для страниц 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;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...