Htaccess y cuentas de usuario

¿Sabes cómo Twitter escribe sus direcciones URL de esta manera: twitter.com/{username}?

¿Cómo lo logran? Debe haber alguna encoding de htaccess involucrada en ella. Lo intenté pero mi código se confunde cuando es un nombre de usuario o algo más y muestra la misma página una y otra vez.

Aquí está mi código:

RewriteRule ^([^/]+)$ login/id.php?name=$1 RewriteRule ^#/([^/]+)$ tags/tag.php?name=$1 

Entonces, si escribo www.misitio.com, me lleva a la página de inicio, y si escribo www.misitio.es/nombre www.mysite.com/{random name that is not a register user} , nuevamente me lleva al hogar. Esto crea un gran error en la url. www.mysite.com/index y www.mysite.com/index2 van a la misma página a pesar de que son dos archivos diferentes. Por cierto, he configurado el htaccess para ocultar las extensiones de archivo.

por favor, ayúdame

htaccess no es mejor para el rendimiento y es más limitado que manejar el enrutamiento con php. En primer lugar, utiliza htaccess solo para dirigir la mayoría de las solicitudes a un archivo php:

 RewriteCond %{REQUEST_URI} !\.(png|jpe?g|gif|css|js|html)$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ index.php [L] 

Entonces, su enrutamiento podría ser tan simple como:

 $pieces = preg_split('-/-', $_SERVER['REQUEST_URI'], NULL, PREG_SPLIT_NO_EMPTY); $username = $pieces[0]; include "users/{$username}.php"; 

pero hay mucho más por hacer en un contexto de aplicación real. Hay muchos frameworks php que tienen características de enrutamiento integradas que pueden interesarte. Cualquier framework principal incluirá esto.

Aquí hay una versión ligeramente expandida de esta respuesta en una publicación previa similar: https://stackoverflow.com/a/20034826/1435655

Para ampliar un poco más, la idea básica que utilizan la mayoría de los sistemas de enrutamiento es escribir las rutas que aceptas y las que las manejarán. Cuando entra una solicitud, se buscan esas rutas hasta que se encuentra una coincidencia. Piensa en esto, de esta manera:

 $myRoutes = [ '/' => 'home.php', '/about' => 'about.php' //etc ]; $route = $_SERVER['REQUEST_URI']; if (in_array($route, $myRoutes)) { include $myRoutes[$route]; } else { echo "Go to a real page. This one doesn't exist." } 

Puede expandir eso para definir los parámetros url para que /users/someDude se envíe a users.php y algo como $routeParams['username'] tendrá un valor de someDude .

 RewriteRule ^(.*)?$ tags/tags.php?name=$1 [NC,L] 

Esto solo reescribirá todo en el archivo tags / tags.php. Puede usar condicionales para excluir ciertas rutas importantes.

 RewriteCond %{REQUEST_URI} !^\/?accounts[.*]$ [NC] RewriteRule ^(.*)?$ tags/tags.php?name=$1 [NC,L] 

… creo que la syntax de la condición de reescritura es correcta, pero no la he probado …

Entonces todo en las cuentas / se concede como se espera y todo lo demás se dirige al archivo de tags. Dependiendo de qué tan complejo sea su sitio, esta podría ser una buena o mala idea. Si su atención se centra en los usuarios y tiene pocas otras páginas (como acerca de, faq, contacto, etc.), entonces debería estar bien. De lo contrario, puede estar metiéndose en una pesadilla para la clasificación condicional.

Usé tags.php como ejemplo y / accounts. No conozco la estructura de su sitio, por lo que no conozco sus necesidades exactas. Esto debería ser suficiente para comenzar.

Mi punto es que puede que tengas que estar preparado para tener un montón de condicionales por encima de tu regla htaccess tags.php ya que estás comparando con el primer segmento uri. Si su camino de esperanza fuera más parecido a http://www.yoursite.com/user/username, sería mucho más fácil.