2009-07-25 17 views
8

Necesito ayuda para crear un sistema de perfil de usuario. Quiero que sea como Facebook o Myspace donde solo tiene el nombre de usuario después de la dirección, sin signos de interrogación ni nada, por ejemplo, www.mysite.com/username. Tengo todo el registro, los scripts de registro, etc., todo hecho, pero ¿cómo puedo ir a los perfiles usando el ejemplo de URL arriba, "/ username"?Cómo crear perfiles de usuario con PHP y MySQL

Respuesta

6

Debería crear una reescritura de mod que tomara el primer directorio y lo pasara como un parámetro $ _GET.

Prueba esto:?

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.*)/$ index.php?user=$1 

Eso debería volver a escribir nada después de '/' como index.php user = directorio

+0

Esto suena complicado? – Spyderfusion02

+0

En realidad ... bastante simple. Solo ponlo en un .htaccess en el directorio raíz. –

+0

Estoy intentando que la regla sea correcta. Dame un segundo. –

2

Tome un vistazo a la rewrite engine. Algunos frameworks también tienen clases para hacer este trabajo, como Zend Framework tiene Zend_Router que puede usar. Puede usar este por su cuenta, otros marcos también lo tienen, verifique los documentos para su gusto preferido.

4

Aquí está la versión abreviada de mi respuesta, en caso de que alguien un momento tldr:

  1. Crear un directorio llamado "usuarios".
  2. Dentro de ese directorio, crea un archivo .htaccess con el siguiente mod_rewrite:

    REQUEST_URIRewriteEngine on

    RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/users/index.php'REQUEST_URI

ahora todas las solicitudes de página para cualquier extensión que no están en el paréntesis hechas a los usuarios directorio irá a index.php

index.php toma la URL que ingresó el usuario, y toma el bit en el fin. Hay un montón de maneras de hacer esto, he aquí una sencilla sobre si conoce la última parte será siempre un nombre de usuario y no, tal vez, de nombre de usuario/imágenes /:

$url_request = $_SERVER['REQUEST_URI']; //Returns path requested, like "https://stackoverflow.com/users/foo/" 
$user_request = str_replace("https://stackoverflow.com/users/", "", $url_request); //this leaves only 'foo/' 
$user_name = str_replace("/", "", $user_request); //this leaves 'foo' 

Ahora, acaba de hacer una consulta a la DB para ese nombre de usuario. Si existe, index.php genera el perfil, si no tiene el script redirigido a: /users/404.php

Pero si el usuario existe, todo lo que verá su visitante es que lo puso en

www.example.org/users/foo/ 

y llegaron a la página de usuario de foo.

No obtener variables para que un pirata informático explote, y una bonita, fácil de poner en otro blog o tarjeta de visita URL.


En realidad, es posible deshacerse del "?" y tenga un buen simple www.example.org/users/someusername.

Me enteré de esto en el artículo de Till Quack "How to Succeed with URLs" en A List Apart.

Por lo tanto, deberá comprender Apache, .htaccess y mod_rewrite, y este método requiere que comprenda los riesgos de seguridad y la cuenta para ellos.Aquí está la idea básica:

Usted crea un directorio llamado "users" (no es necesario, pero esto simplificará todo), y en ese directorio, coloca su archivo .htaccess que contiene un mod_rewite que efectivamente dice "todas las solicitudes de archivos o directorios que no sean de cierto tipo (imágenes, pdfs) deberían enviarse a este script, que controlará dónde enviar al usuario". El mod_rewrite del artículo es el siguiente:

RewriteEngine on 
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/index.php 

En mi ejemplo sería "/your_web_root/users/index.php", la razón por la que es más simple es porque en lugar de este manejo de todos los pedidos en su secuencia de comandos página, es solo tratar con los que están en el directorio de usuarios.

Luego, tiene una secuencia de comandos php que dice "está bien, ¿cuál fue la URL?" y básicamente toma la parte después de la última barra inclinada (o dos, si hay otra al final), y SANIMIZA lo que encuentra (eso es realmente crucial) y dice "¿este nombre de usuario existe en mi base de datos?" En caso afirmativo, envía al solicitante al perfil del usuario, pero con una URL bonita (lo haremos en un segundo), de lo contrario, los envía a la página "Usuario no encontrado" o lo que usted desee.

Así que si encuentra a su usuario, la secuencia de comandos PHP generará el perfil del usuario (Nuevamente, asegúrese de desinfectarlo. Cualquier usuario imbécil puede tener, si le da la oportunidad, incrustar código malicioso en su propio perfil, sabiendo que los navegadores que ven el perfil ejecutarán ese código). Desde la página solicitada era:

www.example.org/users/example_user 

y dado que está utilizando mod_rewrite en lugar de una redirección, la dirección URL sigue siendo el mismo y la secuencia de comandos que el archivo .htaccess se detiene justo vuelca el perfil de usuario. Para el visitante, solo ven que ingresaron la URL anterior y apareció el perfil del usuario.

También desea que el script PHP compruebe que el usuario haga un redireccionamiento a la página "usuario no encontrado", en lugar de simplemente hacer que muestre una página "user_not_found". Esto es por lo que cualquier persona que pone en:

www.example.org/users/blabhaboehbohe 

verá el cambio de URL para

www.example.org/users/notfound/ 

en lugar de ver la URL siendo el mismo. Si un hacker ve que la URL no cambia, ahora sabe que está utilizando un mod_rewrite y, por lo tanto, debe haber un script que maneje el resultado real. Si lo saben, pueden volverse locos buscando todos los agujeros de seguridad que puedan haber dejado abiertos.

aplausos.

Cuestiones relacionadas