Как создать поддомен с использованием Cake PHP? - PullRequest
4 голосов
/ 19 июля 2011

Я создаю сайт, для которого требуется уникальный поддомен для каждого профиля.Я использую технологию Cake PHP + MongoDB.Мне нужно знать о возможности того же.Могу ли я создать физический DNS или я могу просто направить страницу профиля пользователя, с помощью класса маршрутов в Cake PHP.Пожалуйста, предложите, что будет лучше и проще реализовать вместе с осуществимостью того же самого.

Ответы [ 4 ]

5 голосов
/ 05 февраля 2012

Если вы используете CakePHP для каждого из веб-сайтов, вам не нужно беспокоиться о создании нескольких поддоменов для каждого сайта, вы можете просто создать DNS-запись с подстановочными знаками. Это устраняет много хлопот с сервера и администрирования DNS.

Запись DNS с подстановочными знаками (Wiki)

Имея DNS-запись с подстановочными знаками, вы можете использовать HTTP_HOST или способ CakePHP $ request-> host () для определения имени хоста (субдомена), используемого для доступа к вашей системе. Затем вы можете загрузить правильные данные профиля в методе beforeFilter () AppController и двигаться дальше оттуда.

Я делаю что-то похожее:

class User extends AppModel
{
     public $belongsTo = array(
          'Profile'
     );

     public function findByProfileHostname($hostname) {
         return $this->find('first', array('conditions' => array(
             'Profile.hostname' => $hostname
         ));
     }
};

class AppController extends Controller
{
    public function beforeFilter () {
        $this->ActiveUser = $this->User->findByProfileHostname($this->request->host());
        if (!$this->ActiveUser) {
            throw new InvalidArgumentsException(__('%s is not active here', $this->request->host()));
        }
    }
}

* отказ от ответственности: вышеуказанный код был набран из памяти и может не работать напрямую при копировании / вставке.

Надеюсь, это поможет.

1 голос
/ 22 июля 2011

Это легко выполнимо!Небольшая настройка скриптов и хостинга - это все, что нужно:

Предположим, что пока игнорируем субдомены, что вы можете получить доступ к профилям пользователей по адресу yoursite.com/users/view/id - стандартное соглашение.

Все, что нам нужно сделать, - это сопоставить username.yoursite.com с правильным yoursite.com/users/view/id - и это должно происходить каждый раз, когда пользователь регистрируется.Так что в users / add - нам нужно написать скрипт, который может получить доступ к вашим серверам 'users' / 'sites-available' (или эквивалентный) - и либо добавить в конец уже существующей конфигурации yoursite.com, либоСоздавайте 'username.yoursite.com' каждый раз, когда пользователь регистрируется.

Теперь раздражающий бит - на сервере вашему приложению потребуется разрешение на чтение / запись в папку конфигурации серверов, плюс сервер также долженбыть перезапущен для нового файла конфигурации - мои навыки сисадмина идут так далеко, что вам придется это выяснить;запустив скрипт bash или что-то еще о том, как заставить сервер читать новые файлы conf без перезагрузки.

Также убедитесь, что файлы сервера обновляются, если имя пользователя изменилось или пользователь был удален.

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

Прежде всего. Создание поддоменов не имеет ничего общего с Cake, Mongo или PHP. Это вещь DNS, и вам нужно создать правильные записи DNS. Пример:

subdomain1 IN CNAME domain.com.
subdomain1 IN A 123.2.33.45.

Как @ e-sushi указывал, это требует времени. Вы можете автоматизировать этот процесс, но не с помощью PHP, а с доступом с правами root (вы можете сделать это на PHP с помощью shell_exec, но это уже другая история). В зависимости от вашего хостинга это может быть довольно сложно и ненадежно с точки зрения времени.

Представьте себе следующий сценарий. Пользователь создан, но он сможет получить доступ к веб-странице где-то между 6 и 24 часами позже. Вам придется пока создать какой-то временный путь и полный сценарий того, что происходит с данными и как указывают ссылки ... и т. Д. Слишком сложно.

Механизмы маршрутизации от Cake - это вспомогательный механизм, который может преобразовать запрос и решить его по другому пути, используя внутреннюю логику. Так что это может занять что-то вроде:

yourwebsite.com/user/1

И преобразовать его в:

joe.yourwebsite.com

Но этот процесс не зависит от создания и обслуживания поддоменов.

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

Короче говоря:

Автоматическое создание поддоменов с использованием Cake PHP? Извините, но это не сработает.

Longer:

Вы не добьетесь того, чего хотите, используя класс Routes в Cake PHP. «Маршруты» позволяют настраивать пути, но не создают пути или поддоменов. Как уже говорилось: вы говорите о двух разных вещах: Cake PHP Routes Class = перезапись на основе PHP, поддомен = DNS-конфигурация сервера.

Прежде чем тратить время на размышления о DNS, имейте в виду, что новые записи DNS могут занять до 24 часов, чтобы запустить . Прежде чем использовать новый (суб) домен, он должен быть распространен. Вы уверены, что это то, что вы хотите? Это может означать (если подумать о регистрации пользователей), что новые пользователи могут регистрироваться, но не могут использовать или даже достигать своего «нового» субдомена, поскольку он просто еще не известен нескольким DNS-серверам.

Но ... вы могли бы попытаться заставить поддомены с подстановочными знаками работать, если время ожидания не представляет для вас проблем. Но это сильно зависит от вашего хостинг-провайдера и того, что они позволяют вам делать. В случае сомнений обращайтесь к ним (после того, как вы узнали, что делает DNS с подстановочными символами, и , если вы действительно хотите его использовать).

Подобные вопросы и ответы можно найти здесь:

Но я могу лишь дать вам хороший совет: подумайте дважды, прежде чем идти по этому пути. Это может стать слишком ухабистым для вас и ваших пользователей, и тогда вы потеряете драгоценное время, которое вы могли бы потратить на разработку альтернативных вариантов. Кроме того, что не так с приличной структурой каталогов? Вы знаете, что поисковые системы, как известно, любят приличные структуры каталогов больше, чем настройки поддоменов, поскольку структуры каталогов более логичны, когда все данные связаны с одним веб-сайтом. Даже если этот веб-сайт является чем-то большим ... как Facebook или Twitter. ;)

...