Ich habe eine URL, die wie folgt aussieht:
url.com/picture.php?id=51
Wie würde ich diese URL konvertieren in:
picture.php/Some-text-goes-here/51
Ich denke, WordPress macht das gleiche.
Wie mache ich freundliche URLs in PHP?
php
.htaccess
url
mod-rewrite
url-rewriting
Jazerix
quelle
quelle
mod_rewrite
ist alles was Sie dafür brauchen und es gibt viele Fragen dazu hier auf SO. Und wenn Sie "denken", dass WordPress dasselbe tut, warum suchen Sie es nicht einfach nach ? ;)Antworten:
Sie können dies im Wesentlichen auf zwei Arten tun:
Die .htaccess-Route mit mod_rewrite
Fügen Sie eine Datei hinzu, die
.htaccess
in Ihrem Stammordner aufgerufen wird , und fügen Sie Folgendes hinzu:Dadurch wird Apache angewiesen, mod_rewrite für diesen Ordner zu aktivieren. Wenn eine URL gefragt wird, die dem regulären Ausdruck entspricht, wird sie intern nach Ihren Wünschen neu geschrieben , ohne dass der Endbenutzer sie sieht. Einfach, aber unflexibel. Wenn Sie also mehr Leistung benötigen:
Die PHP-Route
Fügen Sie stattdessen Folgendes in Ihren .htaccess ein: (Beachten Sie den führenden Schrägstrich)
Dadurch wird es angewiesen,
index.php
alle Dateien auszuführen, die normalerweise nicht auf Ihrer Site gefunden werden. Dort können Sie dann zum Beispiel:So machen es große Sites und CMS-Systeme, weil es viel mehr Flexibilität beim Parsen von URLs, konfigurations- und datenbankabhängigen URLs usw. bietet. Für die sporadische Verwendung
.htaccess
reichen die fest codierten Umschreiberegeln jedoch aus.quelle
picture.php/invalid-text/51
auch zum selben Speicherort umgeleitet. Sie können auch eine Überprüfung hinzufügen, um festzustellen, ob die Zeichenfolge korrekt ist, und wenn nicht, erneut an die richtige Position umleiten. So habe ich es auf einer meiner Websites mit htaccess gemacht./blog/25
ebenso wie/picture/51
und analysieren müssen/download/684
. Außerdem wird es als sehr schlechte Praxis angesehen (und Sie werden mit Google PR bestraft!), Wenn nicht alle zufällig generierten URLs ordnungsgemäß 404 zurückgeben.FallbackResource /index.php
(beachten Sie den führenden Schrägstrich)FallbackResource
betrifft - wird nur für Dateien aktiviert, die im Dateisystem nicht vorhanden sind, daher der Fallback . Wenn Sie also eine Datei haben/static/styles.css
und darauf verweisen, dasshttp://mydomain.tld/static/styles.css
der Code nie ausgeführt wird, funktioniert er wie erwartet und transparent.if($elements[0] === NULL)
stattdessen verwenden, da$elements
immer noch eine Zählung von eins zurückgegeben wird, auch wenn es leer ist.Wenn Sie nur die Route ändern möchten, um
picture.php
dann eine Umschreiberegel hinzuzufügen,.htaccess
wird dies Ihren Anforderungen entsprechen. Wenn Sie jedoch möchten, dass die URL wie in Wordpress neu geschrieben wird, ist PHP der richtige Weg. Hier ist zunächst ein einfaches Beispiel.Ordnerstruktur
Es gibt zwei Dateien, die im Stammordner benötigt werden,
.htaccess
undindex.php
, und es wäre gut, den Rest der.php
Dateien in einem separaten Ordner zu platzieren, wie zinc/
..htaccess
Diese Datei enthält vier Anweisungen:
RewriteEngine
- Aktivieren Sie die Umschreibe-EngineRewriteRule
- Verweigern Sie den Zugriff auf alle Dateien iminc/
Ordner und leiten Sie jeden Aufruf an diesen Ordner umindex.php
RewriteCond
- Ermöglichen Sie den direkten Zugriff auf alle anderen Dateien (wie Bilder, CSS oder Skripte).RewriteRule
- alles andere umleiten anindex.php
index.php
Da jetzt alles auf index.php umgeleitet wird, wird festgestellt, ob die URL korrekt ist, alle Parameter vorhanden sind und ob die Art der Parameter korrekt ist.
Um die URL zu testen, benötigen wir eine Reihe von Regeln, und das beste Werkzeug dafür ist ein regulärer Ausdruck. Mit regulären Ausdrücken töten wir zwei Fliegen mit einem Schlag. URL, um diesen Test zu bestehen, muss alle erforderlichen Parameter enthalten, die an zulässigen Zeichen getestet werden. Hier sind einige Beispiele für Regeln.
Als nächstes bereiten Sie die Anfrage uri vor.
Nachdem wir die Anfrage uri haben, besteht der letzte Schritt darin, uri anhand der Regeln für reguläre Ausdrücke zu testen.
Eine erfolgreiche Übereinstimmung füllt das
$params
Array fast genauso, wie PHP das$_GET
Array füllt , da wir in Regex benannte Untermuster verwenden . Bei Verwendung einer dynamischen URL wird das$_GET
Array jedoch ohne Überprüfung der Parameter gefüllt.Diese wenigen Codezeilen und die Grundkenntnisse der regulären Ausdrücke reichen aus, um ein solides Routing-System aufzubauen.
Vollständige Quelle
quelle
Dies ist eine .htaccess-Datei, die fast alle an index.php weiterleitet
Dann liegt es an Ihnen, $ _SERVER ["REQUEST_URI"] zu analysieren und zu picture.php oder was auch immer zu routen
quelle
FallbackResource
Direktive vor einigen Hauptversionen eingeführt. Dies ist nun die bevorzugte Methode, um dieses Verhalten zu geringeren Leistungskosten zu implementieren, da nicht die gesamte Rewriting-Engine gestartet werden muss. Dokumentation hier . Ihre Regeln sind auch fehlerhaft, weil Sie nicht auf Verzeichnisse (!-d
) verweisen und alle Erweiterungsfilter veraltet sind - die-f
sollten sie bereits abfangen.PHP ist nicht das, wonach Sie suchen. Schauen Sie sich mod_rewrite an
quelle
Obwohl bereits beantwortet, und der Autor beabsichtigt, eine Front-Controller-App zu erstellen, aber ich poste eine wörtliche Regel für das gestellte Problem. wenn jemand das Problem dafür hat.
Oben sollte für URL funktionieren
picture.php/Some-text-goes-here/51
. ohne eine index.php als Weiterleitungs-App zu verwenden.quelle