Как создать субдомен, например http://user.mywebsite.com ? Мне нужно как-то получить доступ к htaccess? Можно ли просто создать его с помощью чистого php-кода, или мне нужно использовать внешний язык на стороне сценария?
Тем, кто ответил: Ну, тогда я должен спросить мой хостинг, если они предоставляют какой-то доступ к DNS?
Вы хотите создать пользовательскую запись A.
Я уверен, что вы можете использовать подстановочные знаки при указании записей A, которые позволят вам сделать что-то вроде этого:
*.mywebsite.com IN A 127.0.0.1
127.0.0.1 будет IP-адресом вашего веб-сервера. Метод фактического добавления записи будет зависеть от вашего хоста.
Сделать это, как http://mywebsite.com/user, было бы намного легче настроить, если это вариант.
Затем вы можете просто добавить файл .htaccess, который выглядит так:
Options +FollowSymLinks RewriteEngine On RewriteRule ^([aA-zZ])$ dostuff.php?username=$1
В приведенном выше примере имена пользователей ограничены символами az
Правило перезаписи для захвата субдомена будет выглядеть так:
RewriteCond %{HTTP_HOST} ^(^.*)\.mywebsite.com RewriteRule (.*) dostuff.php?username=%1
Функция, которой вы пользуетесь, называется поддоменами подстановочных знаков . Это позволяет вам не настраивать DNS для каждого субдомена, а вместо этого использовать перезаписи apache для перенаправления. Здесь вы можете найти хороший учебник, но есть тысячи учебных пособий. Вот нужный код из этого учебника:
<VirtualHost 111.22.33.55> DocumentRoot /www/subdomain ServerName www.domain.tld ServerAlias *.domain.tld </VirtualHost>
Однако поскольку для этого требуется использование VirtualHosts, он должен быть установлен в файле httpd.conf сервера вместо локального .htaccess.
Я немного отличаюсь от Марка. Я передаю весь домен и захвачу субдомен в php.
RewriteCond {REQUEST_URI} !\.(png|gif|jpg)$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.php?uri=$1&hostName=%{HTTP_HOST}
Это игнорирует изображения и отображает все остальное в файл index.php. Поэтому, если я пойду
http://fred.mywebsite.com/album/Dance/now
Я вернусь
http://fred.mywebsite.com/index.php?uri=album/Dance/now&hostName=fred.mywebsite.com
Затем в моем коде index.php я просто взорву свое имя пользователя из hostName. Это дает мне приятные URL-адреса SEO.
Мы настраиваем подстановочный DNS, как они объясняли выше. Таким образом, запись * .yourname.com
Затем все субдомены на самом деле идут в одно и то же место, но PHP обрабатывает каждый поддомен как другую учетную запись.
Мы используем следующий код:
$url=$_SERVER["REQUEST_URI"]; $account=str_replace(".yourdomain.com","",$url);
Этот код просто устанавливает переменную $account
же, как и поддомен. Затем вы можете получить их файлы и другую информацию на основе их учетной записи.
Это, вероятно, не так эффективно, как перечисленные выше, но если у вас нет доступа к BIND и / или ограниченному .htaccess, этот метод должен работать (пока ваш хост будет настраивать подстановочный шаблон для вас).
Мы фактически используем этот метод для подключения к базе данных клиентов для приложения для электронной коммерции с несколькими компаниями, но это может сработать и для вас.
Не суетитесь с файлами .htaccess, когда вы можете использовать массовый виртуальный хостинг Apache .
Из документации:
#include part of the server name in the filenames VirtualDocumentRoot /www/hosts/%2/docs
В некотором роде это обратное вашему вопросу: каждый «поддомен» является пользователем. Если пользователь не существует, вы получаете 404.
Единственный недостаток заключается в том, что переменная окружения DOCUMENT_ROOT
неправильно настроена на используемый подкаталог, но по умолчанию document_root в htconfig.
Простое решение PHP для субдоменов и многодоменных веб-приложений
Шаг 1. Предоставьте запись DNS A как «*» для доменов (или домена), которые вы собираетесь обслуживать «example.org»
A record => *.example.org A record => *.example.net
Шаг 2. Проверьте уникальность логинов при регистрации или изменении имени пользователя. Кроме того, избегайте точек в этих входах.
Шаг 3. Затем проверьте запрос
// Request was http://qwerty.example.org $q = explode('.', $_SERVER['HTTP_HOST']); /* We get following array Array ( [0] => qwerty [1] => example [2] => org ) */ // Step 4. // If second piece of array exists, request was for // SUBDOMAIN which is stored in zero-piece $q[0] // otherwise it was for DOMAIN if(isset($q[2])) { // Find stuff in database for login $q[0] or here it is "qwerty" // Use $q[1] to check which domain is asked if u serve multiple domains } ?>
Это решение может обслуживать разные области
qwerty.example.org qwerty.example.net johnsmith.somecompany.com paulsmith.somecompany.com
Если вам нужны одинаковые ники в разных доменах, которые по-разному обслуживаются, вам может потребоваться сохранить выбор пользователя для домена при регистрации входа.
smith.example.org // Show info about John Smith smith.example.net // Show info about Paul Smith
Вы могли [потенциально] переписать URL-адрес, но да: вы должны контролировать свои настройки DNS, чтобы при добавлении пользователя он получал свой собственный поддомен.
В дополнение к изменениям конфигурации на вашем WWW-сервере для обработки нового субдомена, ваш код должен будет вносить изменения в ваши записи DNS. Таким образом, если вы не используете свой собственный BIND (или похожий), вам нужно выяснить, как получить доступ к конфигурации вашего поставщика имен. Если они не предлагают какой-то API, это может оказаться сложным.
Обновление: да, я бы уточнил у вашего регистратора, если они также предоставляют службу сервера имен (как это часто бывает). Я никогда не изучал этот вариант раньше, но я подозреваю, что большинство регистраторов нет. Я Googled для API GoDaddy и API-интерфейсов GoDaddy DNS, но не смог ничего изменить, поэтому, я думаю, лучшим вариантом было бы проверить онлайн-справку с вашим провайдером, и если это не ответит на вопрос, их вспомогательного персонала.
Во-первых, вам нужно убедиться, что ваш сервер настроен на разрешение поддоменов подстановочных знаков. Я достиг этого в JustHost, создав подномен вручную с именем *
. Я также указал папку subdomains
в качестве корня документа для поддоменов подстановочных знаков. Добавьте это в файл .htaccess
в папку поддоменов:
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.website\.com$ RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$ RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1 RewriteRule ^(.*)$ /%1/$1 [QSA]
Наконец, все, что вам нужно сделать, это создать папку в вашей папке поддоменов, а затем поместить файлы субдомена в этот каталог.
Это может быть достигнуто в .htaccess
если ваш сервер настроен для разрешения поддоменов подстановочных знаков. Я достиг этого в JustHost, создав подномен вручную с именем *
и указав папку поддоменов в качестве корня документа для поддоменов подстановочных знаков. Добавьте это в ваш .htaccess
файл:
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.website\.com$ RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$ RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1 RewriteRule ^(.*)$ /%1/$1 [QSA]
Наконец, создайте папку для вашего поддомена и поместите файлы поддоменов.
Я просто хотел добавить, что если вы используете CloudFlare (бесплатно), вы можете использовать их API для управления вашими DNS с легкостью.