2012-03-26 3 views
4

Auf meiner Website, Benutzerprofile können durch die URL www.example.com/user/profile.php?uid=3 Ich will es einfacher machen sein Profil für die Benutzer einfach zu erreichen zu erreichen, indem www.example.com/usernameWie erreiche ich eine URL wie www.example.com/username, um auf www.example.com/user/profile.php?uid=10 umzuleiten?

Jeder Benutzer für die Anforderung hat einen Benutzernamen, die nicht geändert werden kann. Wie kann ich das machen?

Here is my current .htaccess file 

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# If the request is not for a valid directory 
RewriteCond %{REQUEST_FILENAME} !-d 
# If the request is not for a valid file 
RewriteCond %{REQUEST_FILENAME} !-f 
# If the request is not for a valid link 
RewriteCond %{REQUEST_FILENAME} !-l 
# finally this is your rewrite rule 
RewriteRule ^blog/(.+)$ blog.php/$1 [L,NC] 
RewriteRule ^(.+)$ user_page/profile.php?uid=$1 [L,QSA] 
+3

Cheats! - http://www.addedbytes.com/for-beginners/url-rewriting-for-begners/ – JohnP

Antwort

7

Verwenden Sie diesen Code in Ihre .htaccess unter DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# If the request is for a valid directory 
RewriteCond %{REQUEST_FILENAME} -d 
# If the request is for a valid file 
RewriteCond %{REQUEST_FILENAME} -f 
# If the request is for a valid link 
RewriteCond %{REQUEST_FILENAME} -l 
# do not do anything 
RewriteRule^- [L] 

# forward /blog/foo to blog.php/foo 
RewriteRule ^blog/(.+)$ blog.php/$1 [L,NC] 

# forward /john to user_page/profile.php?name=john 
RewriteRule ^((?!blog/).+)$ user_page/profile.php?name=$1 [L,QSA,NC] 

Jetzt innen profile.php Sie $_GET['name']-$uid durch Nachschlagen Benutzernamen in einer Datenbanktabelle übersetzen.

+0

Das wird ihn zu 'www.example.com/user/profile.php? Uid = username' umleiten. Aber es gibt keine Möglichkeit, die ID des Benutzers aus dem Benutzernamen über Mod_rewrite zu finden, also ist dies natürlich der richtige Ansatz. ;-) – Basti

+0

Danke für die schnelle Antwort, allerdings habe ich diese Zeile schon in meiner .htaccess Datei - RewriteRule^blog /(.+)$ blog.php/$ 1 [L, NC], es scheint ein Problem zu verursachen. Bitte was mache ich? – Chibuzo

+0

Mit mod_rewrite können Sie diese Regel haben: 'RewriteRule^(. +) $ User/profile.php? Name = $ 1 [L, QSA]' und dann in 'profile.php' können Sie' $ _GET ['name' übersetzen ] 'nach' $ uid' durch Nachschlagen eines Namens in eine Datenbanktabelle. – anubhava

2

Wenn Sie Apache Sie sollten mod_rewrite Modul.

erstellen .htaccess Datei und laden Sie sie auf Apache Document Root und setzen diesen Code:

RewriteEngine on 
RewriteRule ^(.+)$ user/profile.php?username=$1 

Dies wird den Benutzernamen Benutzer/profile.php mit Benutzername Parameter übergeben und Sie können den Benutzernamen in profile.php erhalten und dann Ihre SQL-Abfrage machen, um das Benutzerprofil zu erhalten.

+1

Bitte erläutern Sie diese Antwort, um sie zu verbessern. Die Frage ist bereits mit 'mod-rewrite' gekennzeichnet, so dass der Benutzer nach einer bestimmten Antwort sucht, anstatt nach einer allgemeinen Antwort. – JohnP

+0

@ JohnP: Danke, verbessert. –

+0

Bitte schauen Sie sich meinen Kommentar zur ersten Antwort an. Danke – Chibuzo

Verwandte Themen