Как перенаправить поддомены на страницы учетной записи? Как работает маскировка домена? [закрытый]
Часть 1
Я хочу построить приложение PHP Zend Framework, которое пользователи смогут подписывать для использования. Когда они регистрируются, я бы хотел, чтобы приложение создало поддомен, который указывает на их публичную страницу, которая обслуживает контент, специфичный для этого клиента.
Например: http://mywebapp.com/username или http://username.mywebapp.com
Обновление: "использование поддоменов в качестве ключей учетной записи" - это хороший учебник, который в значительной степени ответил на мой вопрос. вопрос по этому поводу. Это включает в себя использование Zend_Controller_Router_Route_Hostname.
Однако я все еще сомневаюсь...
Вопрос №1: в учебнике не упоминается настройка поддомена с подстановочными знаками. Необходимо ли это для того, чтобы достичь этого? Есть ли способ обойти использование поддомена с подстановочными знаками?
Часть 2
Мне также нужно будет предложить пользователям возможность регистрировать доменные имена и указывать их на свою страницу. Так что если бы вы пошли в http://clientdomain.com , Ты будет видеть http://clientname.mywebapp.com , но вы никогда не сможете сказать, потому что url в адресной строке показывает http://client1.com . есть ли в этом смысл? Я думаю, что этот процесс называется маскировкой домена. Я в основном хочу предложить своим пользователям бесплатную маскировку домена.
Обновление: я только что открыл для себя мир API реселлера доменов. OpenSRS выглядит неплохо. Есть ли у вас кто-то, чтобы рекомендовать?
Вопрос №2: Как происходит маскировка домена работа? Может ли он работать с API реселлера домена?
3 ответов:
Для части 1 вашего вопроса Вы можете реализовать любое из решений здесь - но я не уверен, что вам нужен маршрутизатор - вы не будете предлагать различные функции для каждого сайта - вы просто хотите загрузить различный контент на основе URL. Мы справляемся с этим довольно простым способом:
- по загрузке.php вам нужно захватить URL сервера
- Возьмите URL-адрес и удалите часть после http:// и до .mywebapp.com
- Найдите этот префикс в таблице базы данных и загрузите любой префикс. информация, необходимая вам о пользователе или другая информация, связанная с этим префиксом
- Поместите объект в Zend_Config, к которому вы можете получить доступ с любой страницы с деталями сайта (мы называем это siteinfo).
- Измените контроллеры или представления, чтобы они реагировали по-разному в зависимости от siteinfo-ie. изменение того, какие данные они извлекают и т. д.
Вам нужно будет изменить apache, чтобы справиться с этим - и самый простой способ - убедиться, что ваш домен по умолчанию (страницы, которые появляются, когда URL-адрес не распознано) устанавливается для вашего приложения.
Обработка изменений DNS не так проста - вам нужен DNS-сервер, который может обрабатывать ответы с подстановочными знаками.
Часть 2: Я думаю, что вы говорите, что если я введите URL-адрес http://grouchal.com, что это перенаправление http://grouchal.yourwebapp.com. Это потребует от меня, чтобы обновить существующий DNS-сервер записи grouchal.com так что ваш сервер не найден.
Если вы хотите увидеть хороший пример такой работы на практике вы должны настроить google apps для своей учетной записи домена. У меня есть URL-адреса, такие как mail.grouchal.com то, что когда-то набралось в стане mail.google.com/a/grouchal.com это потребовало, чтобы я установил grouchal.com DNS-сервер, чтобы указать на сервер google. Затем сервер google устанавливает редирект, чтобы изменить url-адрес на тот, который им нужен.
Возвращаясь к решению, которое я предложил выше, вы изменили бы его так, чтобы в дополнение к проверке префикса для вашего домена имя есть (то есть зачистка грушаля от http://grouchal.mywebapp.com ) он также будет искать альтернативные Домены. Так что если нет mywebapp.com в адресе то он будет искать в базе данных grouchal.com а затем установите siteinfo, используя эти данные.
Надеюсь, что это имеет смысл - проблемы, которые вы будете иметь, будут не в PHP, а в настройке вашего Wildcat DNS-сервера и получении ваших клиентов, чтобы настроить их DNS-серверы правильно. Удачи вам с проектом хотя.
Во-первых, вы не правы. Вам не нужно несколько экземпляров/установок вашего приложения. Настроить несколько виртуальных хостов в Apache, чтобы указать на корень док.
ServerName www.serverOne.com DocumentRoot "/htdocs/myapp/public" SetEnv CONFIG_ENV "serverOne" ServerName www.serverTwo.com DocumentRoot "/htdocs/myapp/public" SetEnv CONFIG_ENV "serverTwo"Поместите все ваши базовые url, пути и т. д. в разные разделы файла Zend_Config_Xml.
<?xml version="1.0" standalone="yes"?> <config> <siteOne> <base_url>http://www.siteOne.com</base_url> <image_path>/images/siteOne/</image_path> <database> <host>34.23.34.457</host> <name>siteOne_DB</name> <user>siteOne</user> <pass>**********</pass> </database> </siteOne> <siteTwo> <base_url>http://www.siteTwo.com</base_url> <image_path>/images/siteTwo/</image_path> <database> <host>34.23.34.456</host> <name>siteTwo_DB</name> <user>siteTwo</user> <pass>**********</pass> </database> </siteTwo> </config>Затем в вашем/public / индексе.php
<?php require '../common/config/Bootstrap.php'; $bootstrap = new Bootstrap($_SERVER['CONFIG_ENV']); $bootstrap->runApp(); ?>И в Bootstrap.метод PHP runApp ():
function runApp($env) { $root = realpath(dirname(__FILE__) . '/..'); $config = new Zend_Config_Xml($root . '/config.xml', $env);Это будет отлично работать с относительными ссылками, и это не требует никакого соответствия шаблону :)
Если у вас нет Загрузчик.php файл, вы можете узнать, как создать и использовать в книге Manning Press "Zend Framework In Action", доступной мгновенно в виде загрузки PDF. Это помогло мне пережить трудные времена.
Поскольку Zend Framework использует шаблон MVC, вы можете иметь отдельные модели и контроллеры, а затем различные представления для каждого домена.
После настройки представлений можно определить типизированный домен и показать правильные представления. Например, в вашем bootstrap вы можете определить домен следующим образом:
// Bootstrap or controller $domain = array_reverse(split('[.]', $_SERVER['SERVER_NAME'])); $domain = $domain[1] . '.' . $domain[0]; // Store domain in registry Zend_Registry::set('domain', $domain); // Calling the view from the controller $domain = Zend_Registry::get('domain'); $this->render($domain . 'home');Это просто и идея!
Comments