php - link - facebook fan page change url
Facebook Like Custom Profile URL PHP (1)
Crear un sitio web y quiero poner una URL de perfil personalizada para todos los usuarios de mi sitio (como facebook).
Ya en mi sitio web, las personas tienen una página como http://sitename.com/profile.php?id=100224232
Sin embargo, quiero hacer un espejo para esas páginas que se relaciona con su nombre de usuario. Por ejemplo, si va a http://sitename.com/profile.php?id=100224232 le redirige a http://sitename.com/myprofile
¿Cómo haría esto con PHP y Apache?
Sin carpetas, sin index.php
Solo eche un vistazo a este tutorial .
Editar: Esto es solo un resumen.
0) Contexto
Asumiré que queremos las siguientes URL:
http://example.com/profile/userid (obtener un perfil por ID)
http://example.com/profile/username (obtener un perfil por nombre de usuario)
http://example.com/myprofile (obtener el perfil del usuario que está conectado actualmente)
1) .htaccess
Cree un archivo .htaccess en la carpeta raíz o actualice el existente:
Options +FollowSymLinks
# Turn on the RewriteEngine
RewriteEngine On
# Rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php
¿Qué hace eso?
Si la solicitud es para un directorio o archivo real (uno que existe en el servidor), index.php no se sirve, de lo contrario, cada URL se redirige a index.php .
2) index.php
Ahora, queremos saber qué acción activar, por lo que debemos leer la URL:
En 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);
Con la URL http://example.com/profile/19837 , $ command contendría:
$command = array(
[0] => ''profile'',
[1] => 19837,
[2] => ,
)
Ahora, tenemos que enviar las URL. Agregamos esto en el 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;
}
2) profile.php
Ahora en el archivo profile.php, deberíamos tener algo como esto:
// 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);
}
Para concluir
Desearía ser lo suficientemente claro Sé que este código no es bonito, y no tiene un estilo OOP, pero podría dar algunas ideas ...