2016-06-29 3 views
0

Ich habe eine .htaccess-Datei, wo, wenn ein Benutzer auf meiner Website anmeldet, sie an example.com/profiles/[username] umgeleitet werden. Die hässliche URL ist example.com/profiles/?username=john wo John ein beliebiger Name sein kann. Immer, wenn der Benutzer beispielsweise nach example.com/profiles/[username] sucht, wird eine 404 angezeigt. Stattdessen möchte ich, dass diese freundliche URL auf eine hässliche URL umgeleitet wird, damit ihr Profil angezeigt werden kann. Also ich möchte example.com/profiles/john intern zu example.com/profiles/?username=john umgeleitet werden.Wie man mod_rewrite, also URL-Umleitungen anders herum?

Hier ist meine .htaccess Bedingungen:

RewriteCond %{THE_REQUEST} /profiles/\?username=([^&\s]+) [NC] 
RewriteRule^/profiles/%1? [L,R=302] 

RewriteRule ^profiles/([\w-]+)/?$ /profiles/?username=$1 [L] 

Diese Bedingungen erfolgreich die ?username=john Teil der URL entfernen, wie kann ich es so machen es anders herum ist? Wenn also jemand nach example.com/profiles/john sucht, wird er intern zu example.com/profiles/?username=john umgeleitet, damit die Seite erfolgreich angezeigt wird?

+0

verwenden, können Sie „intern“ sagen. Soll der Browser immer noch denken, dass er auf 'example.com/profiles/john' steht, aber für einige Skripte im' profiles' -Verzeichnis 'usename = john' als' $ _GET'-Schlüssel => value? – Terminus

+0

@Terminus Mit den obigen Regeln zum Umschreiben, wenn ich zu example.com/profiles/?username=john gehe, leitet es die URL zu example.com/profiles/john um und zeigt einen 404-Fehler an, so wie die Seite nicht existiert. Meine Lösung bestand darin, dass der Benutzer, wenn er die freundliche URL eintippt, auf die hässliche URL umgeleitet wird, damit das Profil angezeigt werden kann und der 404-Fehler verschwunden ist. Vorzugsweise würde ich es für die URL im Browser lieben, in seinem freundlichen Zustand zu bleiben und nicht zum hässlichen zu wechseln. Aber die freundliche URL zeigt eine 404. Wenn das Sinn macht – Bytes

+0

eine andere Frage dann: Haben Sie ein 'profiles' Verzeichnis in Ihrem Webroot und eine' index.php' Datei in diesem Verzeichnis (technisch 2 Fragen aber hey) – Terminus

Antwort

0

So leiten /profiles/?username=user-/profiles.user Sie

RewriteCond %{THE_REQUEST} /profiles/\?username=([^&\s]+) [NC] 
RewriteRule^/profiles.%1? [L,R=302] 

RewriteRule ^profiles\.([^/]+)/?$ /profiles/?username=$1 [L] 
+0

Entschuldigung, ich meinte, ich möchte example.com/profiles/user auf example.com/profiles/?username=user umleiten – Bytes

+0

@Bytes Ihre Orignal-Regel schreibt es bereits um. was ist das Problem? – starkeen

+0

Meine ursprüngliche Regel schreibt example.com/profiles/?username=user in example.com/profiles/user um, aber das möchte ich nicht. Ich möchte, dass example.com/profiles/user in dieses example.com/profiles/?username=user – Bytes