Pretty-URLs mit .htaccess
Ich habe eine URL http://localhost/index.php?user=1
. Wenn ich diese .htaccess
Datei
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^user/(.*)$ ./index.php?user=$1
Werde ich jetzt nutzen darf http://localhost/user/1
link. Aber wie wäre es http://localhost/index.php?user=1&action=update
wie kann ich es machen das in http://localhost/user/1/update
?
Auch, wie kann ich diese url http://localhost/user/add
?
Danke. Sorry ich bin relativ neu in .htaccess
.
- Die Grundlagen, 24ways.org/2013/url-rewriting-for-the-fearful
- Sind alle Benutzer, identifiziert durch die Buchstaben oder zahlen? Oder beides? E. g.
/user/1
,/user/BigChris
,/user/BigChris1
? - nur zahlen
Du musst angemeldet sein, um einen Kommentar abzugeben.
schreiben Sie etwas wie dieses:
Wenn Sie möchten, schalten Sie
http://www.yourwebsite.com/index.php?user=1&action=update
in
http://www.yourwebsite.com/user/1/update
Könnten Sie
Um die Parameter in PHP:
mit $1, $2, usw.
Holen Sie sich alle zahlen (1, 34, usw.).
(a, abc, update, etc.).
Dies ist, meiner Meinung nach, ein wenig mehr sauberer und sicherer als (.*) was im Grunde bedeutet, fast alles wird akzeptiert.
localhost/index.php?user&action=add
. Wie kann ich es machen das inlocalhost/user/add
?Da Sie getaggt dies mit PHP, füge ich eine kleine Vorstellung von dem, was ich Tat, und es kann oder kann nicht helfen.
Können Sie natürlich schreiben, das ausschließlich in .htaccess, wobei Sie vorsichtig um. Zum Beispiel, sagen wir Sie haben:
Dann sollte es nach Erhalt der
http://localhost/user/1/update
gehen
http://localhost/index.php?user=$1&action=update
und nicht
http://localhost/index.php?user=$1
Nun, was ich Tat, war vielmehr push-alles zu
index.php?q=$1
Dann habe ich index.php zu behandeln, wie die Abfrage wurde unterbrochen. Also nehmen wir an, jemand betritt
http://www.example.com/user/18239810/update
diese gehen würde, um
http://www.example.com/index.php?q=user/18239810/update
Von dort explodieren die Abfrage-string, die entlang der ersten
/
zu gebenuser
und18239810/update
.Dieser würde mir sagen, dass ich mich übergeben müssen
18239810/update
zu denuser
controller. In dem controller habe ich wieder explodieren, das argument in der Benutzer-id und das Befehl, und ich kann wechseln auf den Befehl zu sagen, wie die Seite zu laden, übergeben Sie die Benutzer-id als argument, um dieupdate
Funktion.Sehr quick-and-dirty-Beispiel (index.php):
Natürlich, dies bedeutet, dass die Konstruktoren alle müssen ein string-argument, das analysiert werden, um akzeptable Werte. Sie können dies tun, mit explodiert und switch-Anweisungen, die immer ausfallenden wieder auf die standard-front-Seite, um unbefugten Zugriff zu verhindern, basierend auf zufälligen raten.
ein einfacher Weg ist, um pass nur eine variabe zu index.php wie diese
und in Ihrem index.php Datei, die Sie dies tun
funktioniert das für alle Fälle, wenn Sie versuchen, passieren viele Variablen, es funktioniert nicht in der wase, wenn Sie etwas tun, wie
die Letzte variable nimmt immer den Wert
add/12/54/54/66
expload
hat einen schönen ring, um es.Danke für die Idee @denoise und @mogosselin. Auch mit @stslavik für den Hinweis auf einige der Nachteil, dass mein code-Beispiel.
Hier ist, wie ich es mache:
mithilfe
var_dump($_GET);
auf den linklocalhost/user/1234/update
ich habewährend
localhost/user/add
ist mein Ziel. Ich will einfach nur andere Stoffe unter der Haube mit PHP.
Für
/user/add
Sie tun müssen, wird eine separate Regel, weil Sie keine "Mitte-parameter". Also:Können Sie dann zusätzliche Regeln für URLs mit zusätzlichen Parametern:
Dies wird Ihnen ermöglichen, Aktionen durchzuführen, die auf bestehende Benutzer. E. g.
/user/1/update
Seine einfach nur versuchen, diese aus !
Thats it !!
Versuchen Sie dies, es ist sehr einfach: