Создание веб-сайта, и я хочу добавить URL-адрес настраиваемого профиля для всех пользователей моего сайта (например, facebook).
На моем веб-сайте уже есть такая страница, как http://sitename.com/profile.php?id=100224232
Тем не менее, я хочу сделать зеркало для тех страниц, которые относятся к их имени пользователя. Например, если вы перейдете на страницу http://sitename.com/profile.php?id=100224232, он перенаправляет вам http://sitename.com/myprofile
Как мне это сделать с PHP и Apache?
Нет папок, нет index.php
Просто взгляните на этот учебник .
Изменить: это всего лишь сводка.
Я предполагаю, что нам нужны следующие URL-адреса:
http://example.com/profile/userid (получить профиль по ID)
http://example.com/profile/username (получить профиль по имени пользователя)
http://example.com/myprofile (получить профиль текущего пользователя)
Создайте файл .htaccess в корневой папке или обновите существующий файл:
Options +FollowSymLinks # Turn on the RewriteEngine RewriteEngine On # Rules RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php
Что это делает?
Если запрос предназначен для реального каталога или файла (который существует на сервере), index.php не обслуживается, иначе каждый URL-адрес перенаправляется на index.php .
Теперь мы хотим знать, какое действие нужно вызвать, поэтому нам нужно прочитать URL-адрес:
В index.php:
// index.php // This is necessary when index.php is not in the root folder, but in some subfolder... // We compare $requestURL and $scriptName to remove the inappropriate values $requestURI = explode('/', $_SERVER['REQUEST_URI']); $scriptName = explode('/',$_SERVER['SCRIPT_NAME']); for ($i= 0; $i < sizeof($scriptName); $i++) { if ($requestURI[$i] == $scriptName[$i]) { unset($requestURI[$i]); } } $command = array_values($requestURI);
с// index.php // This is necessary when index.php is not in the root folder, but in some subfolder... // We compare $requestURL and $scriptName to remove the inappropriate values $requestURI = explode('/', $_SERVER['REQUEST_URI']); $scriptName = explode('/',$_SERVER['SCRIPT_NAME']); for ($i= 0; $i < sizeof($scriptName); $i++) { if ($requestURI[$i] == $scriptName[$i]) { unset($requestURI[$i]); } } $command = array_values($requestURI);
С URL-адресом http://example.com/profile/19837 команда $ будет содержать:
$command = array( [0] => 'profile', [1] => 19837, [2] => , )
Теперь нам нужно отправить URL-адреса. Мы добавляем это в index.php:
// index.php require_once("profile.php"); // We need this file switch($command[0]) { case 'profile' : // We run the profile function from the profile.php file. profile($command([1]); break; case 'myprofile' : // We run the myProfile function from the profile.php file. myProfile(); break; default: // Wrong page ! You could also redirect to your custom 404 page. echo "404 Error : wrong page."; break; }
Теперь в файле profile.php у нас должно быть что-то вроде этого:
// profile.php function profile($chars) { // We check if $chars is an Integer (ie. an ID) or a String (ie. a potential username) if (is_int($chars)) { $id = $chars; // Do the SQL to get the $user from his ID // ........ } else { $username = mysqli_real_escape_string($char); // Do the SQL to get the $user from his username // ........... } // Render your view with the $user variable // ......... } function myProfile() { // Get the currently logged-in user ID from the session : $id = .... // Run the above function : profile($id); }
Хотел бы я, чтобы я был достаточно ясен. Я знаю, что этот код не очень хорош, а не в стиле ООП, но он может дать некоторые идеи …