Мне нужна помощь в создании системы профилей пользователей. Я хочу, чтобы это было как Facebook или Myspace, где у него есть только имя пользователя после адреса, никаких вопросительных знаков или чего-либо еще, например, www.mysite.com/username
. У меня есть все записи, сценарии ведения журналов и т. Д. Все сделано, но как мне перейти к профилям с использованием приведенного выше примера URL-адреса «/ username»?
Вам нужно будет создать mod rewrite, который взял первый каталог и передал его как параметр $ _GET.
Попробуй это:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.*)/$ index.php?user=$1
Это должно переписать что-либо после '/' в качестве index.php? User = directory
Вот сокращенная версия моего ответа, в случае, если кто-то имеет tldr момент:
Внутри этого каталога создайте файл .htaccess со следующим mod_rewrite:
REQUEST_URIRewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/users/index.php'REQUEST_URI
Теперь все запросы страниц для любых расширений, не содержащиеся в скобках, сделанные в каталоге users, будут отправляться в index.php
index.php берет URL-адрес, который пользователь вводит, и захватывает бит в конце. Есть много способов сделать это, вот простое, если вы знаете, что последняя часть всегда будет именем пользователя, а не, может быть, именем пользователя / pics /:
$url_request = $_SERVER['REQUEST_URI']; //Returns path requested, like "/users/foo/" $user_request = str_replace("/users/", "", $url_request); //this leaves only 'foo/' $user_name = str_replace("/", "", $user_request); //this leaves 'foo'
Теперь просто сделайте запрос к БД для этого имени пользователя. Если он существует, index.php выводит профиль, если у него нет перенаправления сценария на: /users/404.php
Но если пользователь действительно существует, все, что ваш посетитель увидит, это то, что они вставляют
www.example.org/users/foo/
и они попали на страницу пользователя foo.
Нет переменных для хакера, которые можно использовать, и довольно, легко надеть другой блог или URL визитной карточки.
На самом деле, можно избавиться от "?" и иметь приятное простое http://www.example.org/users/someusername.
Я узнал об этом в статье Тилла Кьюка « Как добиться успеха с URL-адресами » в A List Apart .
Поэтому вам нужно будет понять Apache, .htaccess и mod_rewrite, и этот метод требует от вас понимания рисков безопасности и учета их. Вот основная идея:
Вы создаете каталог под названием «пользователи» (вам это не нужно, но это упростит все это), и в этом каталоге вы помещаете свой файл .htaccess, который содержит mod_rewite, который эффективно говорит «все запросы к файлу или каталогу, которые (изображения, pdf) должны быть отправлены на этот скрипт, который будет обрабатывать, куда отправить пользователя ». Mod_rewrite из статьи выглядит следующим образом:
RewriteEngine on RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/index.php
В моем примере это будет «/your_web_root/users/index.php», причина, по которой это более просто, заключается в том, что вместо этого скрипта, обрабатывающего ВСЕ-запросы на вашей странице, он имеет дело только с теми, которые находятся в каталоге пользователя.
Затем у вас есть php-скрипт, который говорит «хорошо, какой URL был указан?» и он в основном захватывает часть после последней конечной косой черты (или двух, если есть еще одна в самом конце), и SANITIZES, что она находит (это действительно важно), и говорит: «Это имя пользователя существует в моей БД?» Если да, он отправляет запросчику в профиль пользователя, но с симпатичным URL-адресом (мы это получим через секунду), если нет, он отправляет их на страницу «Пользователь не найден» или что угодно.
Поэтому, если он найдет вашего пользователя, PHP-скрипт выведет профиль пользователя (опять же, убедитесь, что он дезинфицирует его). Любой пользователь jerk, который у вас может быть, может – если вы даете им возможность – встраивать вредоносный код в свой собственный профиль, зная, что браузеры, которые просматривают профиль, будут выполнять этот код). Поскольку запрошенная страница была:
www.example.org/users/example_user
и поскольку вы используете mod_rewrite вместо перенаправления, URL-адрес остается прежним, а скрипт, который файл .htaccess извлекает, просто удаляет профиль пользователя. Посетителям они просто видят, что они вставляют вышеуказанный URL-адрес, и появился профиль пользователя.
Вы также хотите, чтобы PHP-скрипт проверял, чтобы пользователь сделал перенаправление на страницу «пользователь не найден», вместо того, чтобы просто выводить страницу «user_not_found». Это тот, кто ставит:
www.example.org/users/blabhaboehbohe
Вы увидите изменение URL-адреса
www.example.org/users/notfound/
вместо того, чтобы видеть, что URL-адрес остался прежним. Если хакер видит, что URL-адрес не изменяется, теперь они знают, что вы используете mod_rewrite, и, следовательно, должен быть скрипт, обрабатывающий фактический вывод. Если они это знают, они могут начать сходить с ума, глядя на каждую дыру в безопасности, которую вы, возможно, оставили открытой.
веселит.
Взгляните на двигатель перезаписи . В некоторых фреймворках также есть классы для выполнения этой работы, например Zend Framework имеет Zend_Router, который вы можете использовать. Вы можете использовать это самостоятельно, другие структуры также имеют их, проверьте документы для вашего предпочтительного вкуса.