PHP Clean URL's - Verständnissfragen

Jack159

Lieutenant
Registriert
Dez. 2011
Beiträge
766
Hallo,

Der Sinn von Clean URL's ist mir klar:
- Sehen schöner aus
- Suchmaschinenfreundlicher

Mir ist die Funktionsweise aber noch nicht 100%ig klar.

Wenn ich die .htaccsess entsprechend umschreibe, dann wird jeder Link auf die index.php weitergeleitet. In der index.php muss dann ein entsprechendes Routing stattfinden. Zunächst muss die Request-URL der Form (Beispiel):

hostxy.de/users/profile/edit

erstmal auseinandergenommen werden, da diese URL ja zunächst auf keine wirkliche Datei auf den Server verweist.
Hier im Beispiel wären also die 3 intressanten Parameter:
- users
- profile
- edit

Könnte ein entsprechendes Konstrukt dann so aussehen? (Stark vereinfacht):

PHP:
// $arrayA enthält die 3 obigen Parameter
switch($arrayA[0]) {

   case "users": if($arrayA[1] == "profile") if($arrayA[2]== "edit") include ("edit.php");

}


Und falls man eine URL der Form

hostxy.de/pm/delete/46

hat, bei der die PM mit der ID 46 gelöscht werden soll, dann würde entsprechend beispielsweise eine Methode deletePM($id) im Controller aufgerufen werden?
 
@ Lutz:

Die Rewrite Engine macht aber in dem gewünschten Fall hier ja zumindest nicht mehr als sämtliche URL-Aufrufe erstmal an die index.php weiterzuleiten, oder?

Meine Frage bezieht sich ja eher auf das was danach passiert.
 
Nein, Du brauchst das nicht alles über die index.php machen.

Beispielsweise kannst Du Deine url

hostxy.de/pm/delete/46

in hostxy.de/del.php?pm=46 "übersetzen".
 
Lutz schrieb:
Beispielsweise kannst Du Deine url

hostxy.de/pm/delete/46

in hostxy.de/del.php?pm=46 "übersetzen".

Das "übersetzen" muss ich aber selber programmieren (soweit ich weiß), darum geht es ja hier.


@ kling1:

Ich erkenne in deinem Framework teilweise die Umsetzung meiner Ideen aus dem Startpost. Also liege ich mit meiner Idee aus dem Startpost richtig?
 
Programmieren würde ich das nicht nennen.
Eine Zeile pro Url in der htaccess:

Beispiel:

RewriteEngine on
RewriteRule ^seite_([0-9]+).html$ seite.php?id=$1

macht aus "seite_1.html" "seite.php?id=1"
 
Der Ansatz aus dem Startbeitrag ist schon richtig. Wichtig ist eben, dass bei der Umleitung auf die index.php per .htaccess die Paramter nicht verloren gehen. Ergo müsste (für dein Beispiel) die .htaccess von
"hostxy.de/users/profile/edit" auf "hostxy.de/index.php?a=users&b=profile&c=edit" oder ähnlich umleiten.

Und dann kannst du im PHP-Code natürlich diese Parameter abfragen und entsprechend eine edit.php etc. inkludieren.
 
Lutz schrieb:
Programmieren würde ich das nicht nennen.
Eine Zeile pro Url in der htaccess:

Beispiel:

RewriteEngine on
RewriteRule ^seite_([0-9]+).html$ seite.php?id=$1

macht aus "seite_1.html" "seite.php?id=1"

Aber es gibt doch auch die Variante, bei der man die ReWriteEngine nur dazu nutzt, sämtliche Requests auf die index.php umzuleiten und da dann sozusagen ein manuelles Routing einbaut (habe ich in einigen Tutorials gesehen).

Welche Variante ist denn die üblichere?
 
Jack159 schrieb:
Das "übersetzen" muss ich aber selber programmieren (soweit ich weiß), darum geht es ja hier.
Ja, natürlich. An dieser Stelle macht es Sinn, von Anfang an ein lineares Konzept zu fahren, sowohl was die Seitenstruktur als auch zusätzliche Module angeht.
Du könntest z.B. definieren, dass der erste Teil der URL dein Seiten-Alias ist. Oder du führst eine zentrale Datenbank, in der die verschiedenen Namen verschiedenen Strukturelementen zugeordnet sind.

Oder du machst es dir leicht, schnappst dir ein leichtgewichtiges Routing-Framework und fertig. Im schlimmsten Fall liest du dir da dein Wissen an.

Lutz schrieb:
Programmieren würde ich das nicht nennen.
Eine Zeile pro Url in der htaccess:
Das mag funktionieren, ist aber totaler Dünnpfiff, aus mehreren Gründen.
- Apache ist der einzige Webserver mit .htaccess. Der Trend geht aber durchaus zu nginx. Willst du, bloß für ne neue Unterseite deine komplette Config ändern und den nginx neustarten?
- Was machst du, wenn dein System das dynamische Erstellen von Seiten ermöglicht? Was machst du allgemein bei komplexem dynamischen Routing, z.B. ner RESTful API?
 
Ich habe mir das ganze nochmal etwas angeschaut.

Es gibt so wie es scheint, 2 verschiedene Ansätze:

1. Ansatz:
Man schreibt einfach viele bzw. möglichst allgemeine "Übersetzungsregeln" in die .htaccess. Dort holt man sich dann entsprechend auch die Parameter, falls vorhanden. Diese Parameter können dann per GET in PHP abgefragt werden.


2. Ansatz:
Man leitet einfach sämtliche URL-Requets auf die index.php um und nimmt dort dann die Request-URL auseinander, sodass man dann am Ende nur noch die relevanten Parameter hat.



Der 2. Ansatz gefällt mir etwas besser. Aber welcher ist denn der bessere oder der üblichere genutzte? In Tutorials finde ich beide Varianten...
 
Der 2. ist weit besser. Der erste ist für Laien-Arbeit mit einer kleinen Anzahl Seiten/Optionen noch akzeptabel, sobald du aber komplexe Strukturen hast wars das. Außerdem löst der 2. Ansatz auch das "ich hab aber keinen Apache" - Problem.

Stell dir mal diese URL (aus nem Magento-System) vor:
domain.tld/review/product/list/id/5397/category/210/#review-form
Ok, wir müssen also das Review-Modul laden... Wir bewerten ein Product im List-Modus, Product-ID = 5397, Prouduct-Category = 210, scrolle zu #review-form
Wenn du sowas mit Variante 1 modelliert kriegst bin ich beeindruckt.
 
Zurück
Oben