2009-07-18 11 views
0

Ich sehe Websites, die diese Konvention verwenden.Wie htaccess für dynamisch generierte URLs zu verwenden ist

hxxp: //www.twitter.com/golem

hxxp: //www.twitter.com/golem/following

Ich versuche, dass auf meiner Website zu tun. "Golem" ist dynamisch und ist im Grunde der Benutzername.

Also hxxp: //www.mysite.com/golem würde auf die Golem-Seite gehen.

Und hxxp: //www.mysite.com/golem/details.php würde auf die Detailseite für Golem gehen.

Die Frage ist:

  1. Wie kann ich .htaccess machen, so dass es immer & user_name fügt = Golem, um alle meine PHP-Dateien in dem Query-String? Ohne es in der Browser-Adressleiste anzuzeigen. Also im Grunde muss es den ersten Pfad der URL, die Schrägstrich hat und nehmen Sie es als Abfrage, um Ende der PHP-Seite, die ich sehe, zu nehmen.

  2. So machen Sie es so hxxp: //www.mysite.com/golem/details.php läuft tatsächlich Datei in realen Standort bei hxxp: //www.mysite.com/details.php? User_name = Golem (kein "Golem" im Pfad), während weiterhin die falsche URL in der Adressleiste angezeigt wird.

  3. Machen Sie es für andere URLs wie hxxp arbeiten: //www.mysite.com/golem/page.php und hxxp: //www.mysite.com/golem/view.php und etc etc

Sah Tutorials etc aber kann keine Antwort finden. Schätze jede Hilfe!

+0

Blick auf mod_rewrite. – derobert

Antwort

1

Aktivieren Sie mod_rewrite, falls noch nicht geschehen. In Ihrem .htaccess müssen Sie einige RewriteRule hinzufügen.

Versuchen Sie folgendes:

RewriteRule ^([^/]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [L] 

Wenn es nicht funktioniert, versuchen Sie mit diesem ein:

RewriteRule ^/([^/]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [L] 

Aber es ist ein Gegenstück: wenn Sie klassische URLs haben, werden sie durch gefangen werden diese Regeln. Wenn Sie Benutzernamen von Skriptnamen unterscheiden können, gibt es eine Lösung. Nehmen wir an, die Benutzernamen dürfen keinen Punkt enthalten. Dann würden Sie die Regel mit diesem ersetzen:

RewriteRule ^([^/.]+)/([^?]*)\??(.*)$ $2?$3&user_name=$1 [L] 

(Beachten Sie den Punkt in der ersten Klammer - es sagt, dass, wenn die URL einen Punkt enthält, dann wird es nicht mit der Regel übereinstimmen).

wird nun als „normale“ url wird jede URL einen Punkt vor den Parametern behandelt.

Wenn die Benutzernamen einen Punkt enthalten, sind wir vor einem Problem, denn wie kann man das details.php sagen ist der Name eines PHP-Skript oder einen Benutzernamen? In diesen Fällen wird es sehr schwierig, RewriteRules zu schreiben, die nur dem entsprechen, was wir wollen. Und es ist auch sehr schwierig, sie zu testen, weil es sehr viele Randfälle gibt, an die man nur schwer denken kann.

+0

Vielen Dank FWH.Es scheint zu funktionieren, aber aus irgendeinem Grund kann ich andere Teile der URL-Parameter nicht mehr lesen. Ich kann den Benutzernamen mit $ _REQUEST ['user_name'] erhalten, aber wenn die URL wie hxxp: //www.mydomain.com/details.php? Item_id = 23 ist, kann ich item_id nicht aus irgendeinem Grund von der URL entfernen. Wer weiß warum? –

+0

Dies liegt daran, dass die obigen Regeln jede URL erfassen und den ersten Teil als Benutzernamen behandeln, auch wenn es "details.php" ist. Wenn Sie die Benutzernamen von den Skriptnamen unterscheiden können (zum Beispiel wenn Benutzernamen keinen Punkt enthalten können), sollten Sie die Regeln durch etwas ersetzen, das nur URLs ohne Skriptnamen abfängt. Ich aktualisiere meine Antwort, um dies zu reflektieren. – FWH

+0

Danke FWH. Aber es scheint immer noch nicht zu funktionieren. Ich habe eine Anfrage für die item_id in URL gestellt, aber sie wird es mir nicht geben. Es gibt mir jedoch einen Benutzernamen. –

Verwandte Themen