дружественные URL для профиля пользователя? - PullRequest
0 голосов
/ 30 августа 2010

Здравствуйте, я хотел создать формат для URL-адреса пользователя, например, для пользователя ninja123, он получит ссылку на профиль example.com/ninja123, я использую php mysql на apache. это нормальная ссылка!

viewprofile.php?userid=2

как я могу оценить эту проблему? и я плохой .htaccesss новичок :)) спасибо

Ответы [ 3 ]

1 голос
/ 30 августа 2010

Создать файл .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
</IfModule>

Если посетитель сайта запрашивает http://example.com/Ninja123, папка не будет найдена, поэтому она запустит index.php и заполнит $_GET['url'] /Ninja123

В index.php получите компонент пути из $_GET['url']:

$username = trim(parse_url($_GET['url'], PHP_URL_PATH), '/');

Теперь $ username будет содержать Ninja123. Вы можете использовать это для поиска в базе данных для получения идентификатора пользователя. Если вы хотите, чтобы это работало с запросами, которые содержат подкаталоги (example.com/Ninja123/photos/party), вы должны удалить эти подкаталоги до выполнения запроса.

0 голосов
/ 30 августа 2010

Вы не можете использовать .htaccess RewriteRule только для этого. Если форум предоставляет внутренние идентификаторы базы данных, вам нужно переписать части SQL-запроса. В основном вам нужно сначала принять $_GET["username"] вместо "userid", а затем переписать поиск. Как пример:

db_query("SELECT * FROM users WHERE id=?", (int)$_GET["userid"]);

до

db_query("SELECT * FROM users WHERE username=?", encode($_GET["username"]));

Зависит от приложения, фактической структуры таблицы SQL и интерфейса БД (ваш форум, вероятно, использует mysql_query и mysql_real_escape_string вместо encode).

После этого вы можете развернуть простые RewriteCond !-f {%..} и RewriteRule (.+) /viewprofile?username=$1 для получения коротких URL.

0 голосов
/ 30 августа 2010

Вместо того, чтобы делать $_GET['userid'] и искать идентификатор ... переключите его, ища имя, так что это будет похоже на: viewprofile.php?userid=Ninja123

Попробуйте этот генератор переписывания мод: http://www.generateit.net/mod-rewrite/

...