Es ist natürlich nett, den Nutzern auf ihrer Website freundliche URLs für ihre Inhalte zu geben. Aber wie macht man das am besten? Es gibt eine Menge Vorteile für etwas wie foo.com/users/alice, am wichtigsten, dass Sie Ihren Root-Namespace nicht überladen. Aber ich denke, Einfachheit für Benutzer übertrumpft all das. Viele große Websites scheinen zuzustimmen (Friendfeed, lecker, und Flickr in den Sinn kommen) und diese Frage ist, wie man das auf der Serverseite erreichen.
Nehmen wir an, die echte URL für alice ist foo.com/userpage?user=alice und wenn jemand versucht, auf eine nicht existierende Benutzerseite (sagen wir foo.com/bob) zu surfen, sollte er foo.com/createnew erreichen? Benutzer = Bob.
Der Benutzer sollte natürlich nie die hässlichen "echten" URLs oben sehen, nur foo.com/alice oder foo.com/bob. Beachten Sie, dass der Root-Namespace freigegeben ist. Zum Beispiel sollte foo.com/help nicht in foo.com/userpage?user=help übersetzt werden.
Vermutlich frage ich nach ein paar einfachen mod_rewrite-Regeln, aber vielleicht gibt es einen ganz anderen Ansatz, an den ich nicht denke. Auf jeden Fall dachte ich, es wäre gut, eine endgültige oder "Best-Practice" -Lösung für diese gemeinsame Frage zu erstellen.
PS: Fühlen Sie sich frei, die Vorzüge anderer Alternativen wie alice.foo.com oder users.foo.com/alice zu kommentieren.
PPS: Ich glaube, ich habe gesehen, dass dieses Thema in anderen Fragen diskutiert wurde, aber es scheint schwierig zu sein, danach zu suchen. Zeiger willkommen! Zusätzlich zu zusätzlichen Keywords, um dies natürlich durchsuchbarer zu machen. Schlüsselwörter: Benutzerbereich, globaler Namespace, URL-Namespace.
Die folgenden Regeln schreiben eine URL der Form foo.com/bar to foo.com/userpage?user=bar unter der Bedingung um, dass die Leiste nicht bereits eine Datei oder ein Verzeichnis auf dem Server ist. Setzen Sie Folgendes in .htaccess:
%Vor%Wie bei Alex 'Antwort sollte das userpage-Skript zu create neu umleiten, wenn der Benutzer nicht existiert:
%Vor%(Wie Knuth sagt, hüte dich vor Fehlern im obigen Code - ich habe es nur bewiesen, nicht ausprobiert. Ich werde diese Antwort aktualisieren, wenn ich tatsächlich bestätigt habe, dass es funktioniert.) PS: BESTÄTIGT!
Ich würde sagen, es hängt davon ab, wie benutzerzentriert Ihre Website ist.
Seiten wie MySpace sind Ссылка , weil sich die Seite vollständig um den Benutzer dreht.
Ein Blog oder eine Nachrichtenseite, auf der Sie sich jedoch registrieren können, aber es ist nicht wichtig oder verpflichtend, könnte von
profitierenGlauben Sie, dass Sie, wenn Sie eine Website mit Benutzern erstellen, vom MVC-Entwurfsmuster oder zumindest von einem beliebten MVC-Framework profitieren könnten, das einen Router zur Steuerung von URIs verwendet?
Wenn dieser URI über einen Router kam und dann an den UsersController gesendet wurde, konnten Sie entweder das Profil des Benutzers anzeigen oder ihn anweisen, diesen Benutzer zu erstellen. Sie müssen sich nicht mit mod_rewrite herumschlagen, außer dass Sie eine Regel erstellen, die alle Anfragen an nicht vorhandene Dateien an index.php (oder was auch immer der Standard Ihrer serverseitigen Sprache ist) richtet.
Wenn Sie mod_rewrite verwenden möchten, versuchen Sie diese Regeln
%Vor%Bitte notieren Sie das führende Carat wie von Gumbo vorgeschlagen, so dass es nur für / users / der TLD passt.
Das passt zu allem wie foo.com/users/bob mit einem optionalen Schrägstrich. Es ist case insensitive und wird die letzte Regel sein.
Wenn die Anfrage kommt und das $ _GET ['user'] nicht in Ihrer DB existiert, könnten Sie etwas wie dieses versuchen
%Vor%Dann machen Sie auf der create new Seite einfach so etwas
%Vor%Damit wird der Benutzername automatisch mit dem Benutzernamen ausgefüllt, mit dem er versucht hat, auf ein Profil zuzugreifen.
Wenn Sie mehr über PHP und MVC wissen möchten, versuchen Sie eine Google-Suche oder stellen Sie hier eine Frage zu Stack Overflow.
Tags und Links namespaces url url-rewriting mod-rewrite friendly-url