Я сталкиваюсь со следующей проблемой:
У наших пользователей есть желание создать персонализированные сайты непосредственно с нашего основного домена в форме http://www.example.com/membername
. Я смотрю на возможные решения двумя способами, но ни один из них не идеален (будет объяснено ниже).
Метод 1 - ?Member=
В этом методе я просто создаю пользовательский URL и сохраняю информацию в профиле базы данных участника. Например: если я хочу, чтобы мой «пользовательский» URL-адрес был jm4, чтобы потребитель посетил мой сайт, он должен ввести http://www.example.com?Member=jm4
.
Сайт, конечно, делает $_GET['Member']
для поиска информации об участнике, сохраняет первичные данные в сеансе со страницы индекса, а затем перенаправляет на домашнюю страницу. Потребитель больше не видит имя участника в URL-адресе, а видит все имена страниц для www.example.com, как если бы он просто посетил родительский домен для запуска (однако на странице каждого участника есть пользовательская информация).
Пока этот метод работает, он создает следующие проблемы:
- URL-адрес не так прост, как
/jm4
и любые ошибки, набрав
подстановочный знак ?Members=
приведет к
ошибка страницы. Также этот метод сохраняет
информация этого конкретного члена
в сессии (что необходимо
просмотр от страницы к странице на этом
определенный член домена) и
мешает кому-то просто печатать
http://www.example.com?Member=name2
до
посетить другой сайт без очистки
их сеанс или закрытие браузера.
Метод 2 - /membername
Хотя предпочтительный метод, в настоящее время единственный способ, которым мы знаем, как создать, - это вручную создать индексный файл в подпапке, перенаправьте его на первичный индекс, а затем разрешите потребителю просматривать личный сайт участника.
Например, если я захожу на www.example.com/jm4
, я попадаю в папку /jm4
, которая содержит index.php . Внутри этого файла просто содержится:
<?php
session_start();
ob_start();
$_SESSION['AgentNumber'] = "779562";
header("Location: ../index.php");
exit;
?>
первичный индекс распознает это с:
<?php
session_start();
ob_start();
if ($_SESSION['MemberNumber'] == NULL) {
header("Location:ac/");
exit;
}
$conn = mysql_connect("localhost", "USER", "PW");
mysql_select_db("DB",$conn);
$sql = "SELECT * FROM table WHERE MemberNumber = $_SESSION[MemberNumber]";
$result = mysql_query($sql, $conn) or die(mysql_error());
while ($newArray = mysql_fetch_array($result)) {
$_SESSION['MemberName'] = $newArray['MemberName'];
$_SESSION['MemberPhone'] = $newArray['MemberPhone'];
$_SESSION['MemberMobile'] = $newArray['MemberMobile'];
$_SESSION['MemberFax'] = $newArray['MemberFax'];
$_SESSION['MemberEmail'] = $newArray['MemberEmail'];
$_SESSION['MemberAddress'] = $newArray['MemberAddress'];
$_SESSION['MemberCity'] = $newArray['MemberCity'];
$_SESSION['MemberState'] = $newArray['MemberState'];
$_SESSION['MemberZip'] = $newArray['MemberZip'];
$_SESSION['MemberAltName'] = $newArray['MemberAltName'];
}
mysql_close($conn);
header("Location: home/");
exit;
?>
Мы, конечно, предпочли бы использовать второй метод с точки зрения «легкости» для члена, но продолжаем сталкиваться со следующими проблемами:
- Мы вынуждены вручную создать
подпапка и уникальный файл index.php
за каждого нового члена мы на борту
- Хотя вышеупомянутое, вероятно, может быть
автоматизированный (когда новый член создает
профиль, автоматически генерировать php
файл и папка) но это больше
сложный и мы не хотим
иметь 3000 подпапок на основной
домен.
Кто-нибудь сталкивался с подобными проблемами? Если да, то как ты решил это? Что бы вы посоветовали, основываясь на моих данных выше? Любой совет приветствуется.
Также - использование в качестве субдомена (membername.example.com
) не является предпочтительным, поскольку наш текущий SSL не допускает подстановочные знаки.
РЕДАКТИРОВАТЬ 1 - СУЩЕСТВУЮЩИЙ ФАЙЛ .HTACCESS
Мой существующий файл .htaccess на сайте выглядит следующим образом:
ErrorDocument 404 /404.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
RewriteRule ^(.*)$ /?Member=$1 [L]