Проблема создания "пользовательских" URL-адресов пользователей - PullRequest
0 голосов
/ 23 августа 2010

Я сталкиваюсь со следующей проблемой:

У наших пользователей есть желание создать персонализированные сайты непосредственно с нашего основного домена в форме 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;
?>

Мы, конечно, предпочли бы использовать второй метод с точки зрения «легкости» для члена, но продолжаем сталкиваться со следующими проблемами:

  1. Мы вынуждены вручную создать подпапка и уникальный файл index.php за каждого нового члена мы на борту
  2. Хотя вышеупомянутое, вероятно, может быть автоматизированный (когда новый член создает профиль, автоматически генерировать 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]

Ответы [ 3 ]

3 голосов
/ 23 августа 2010

Вы можете сделать свой предпочтительный метод, просто добавив несколько строк к .htaccess в корневом каталоге:

Этот сайт должен помочь вам начать работу Или этот

2 голосов
/ 23 августа 2010

Вы можете использовать это в файле .htaccess для вашего второго метода. Он будет перезаписывать http://yoursite.com/membername в http://yoursite.com/?Member=membername

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /?Member=$1 [L]
</IfModule>
2 голосов
/ 23 августа 2010

Если вы используете apache, то вы можете использовать mod_rewrite, чтобы изменить URL-адреса, такие как http://host/membername на http://host/memberpage.php?name=membername.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...