Как создать субдомены с помощью Cake PHP?

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

Заранее спасибо.

Solutions Collecting From Web of "Как создать субдомены с помощью Cake PHP?"

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

Wild-Card DNS Record (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())); } } } 

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

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

Это легко выполнимо! Требуется немного конфигурации сценариев и хостинга:

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

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

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

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

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

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

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

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

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

 yourwebsite.com/user/1 

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

 joe.yourwebsite.com 

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

Вкратце:

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

Longer:

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

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

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

Аналогичные вопросы и ответы можно найти здесь:

  • как я могу создать личный поддомен программным образом с помощью php
  • Как бы вы автоматически создали поддомены с DNS?

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