2016-12-20 4 views
0

Ich versuche, ein System der Umschreibung von URLs in .htaccess zu realisieren..htaccess Php rewrite url

Dann hier ist mein Ziel: Wenn ich eine URL dieser Form haben: http://localhost/view.php?Id=456

Dann will ich es zu transformieren zu: http://localhost/456

ich diese Regel in .htaccess verwenden:

RewriteRule^([a-zA-Z0-9] +) $ view.php? Id = $ 1

Jetzt funktioniert das sehr gut!

Aber mein Problem, das ich möchte Punkte id hinzufügen dh statt 456 kann ich sagen: my.book

Das heißt: http://localhost/my.book

+0

Sie müssen nur reg-x-Muster ändern, um Punkte zu erlauben, oder vielleicht nur alles –

Antwort

0
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-zA-Z0-9\.]+)$ view.php?id=$1 [QSA,L] 

Sie müssen RewriteCond %{REQUEST_FILENAME} !-f vor dem RewriteRule Linie um den Server zu sagen, dass die RewriteRule unten geschrieben ausgeführt werden, wenn die Eingabe in der URL übergeben nicht eine tatsächliche Datei. Da der Server nach einer Datei sucht, die mit der eingegebenen URL übereinstimmt, wird sie auch nicht funktionieren, wenn Sie my.book in der URL übergeben, da der Webserver . als Präfix für die Erweiterung .php oder .html oder ähnlich erkennt und dadurch zu Ergebnissen führt Not Found Fehler, wenn keine Datei namens my.book existiert. Also müssen Sie auch . in der URL entkommen.

Um . ‚s in der Eingabe zu ermöglichen, müssen Sie . mit Escape-Sequenz \ in der Zeichenklasse Gruppe wie ^([a-zA-Z0-9\.]+)$ hinzuzufügen. Hinweis: Wenn Sie dies zulassen, kann dies dazu führen, dass die Erweiterung in der URL nicht mehr angezeigt wird. Das heißt, die Übergabe der URL in der URL view.php führt nicht zur eigentlichen Datei. Es wird vielmehr als ein Wert in der Abfragezeichenfolge betrachtet.

+0

Vielen Dank für Ihre Unterstützung Es hat sehr gut funktioniert! –

+0

Gern geschehen! Wenn meine Antwort für Sie funktioniert hat, können Sie die Antwort gerne annehmen. :) – Perumal

0

Try this:

RewriteRule ^([a-zA-Z0-9\.]+)$ view.php?Id=$1 

Grundsätzlich Was ich getan habe ist, dass ich \. mit Ihrem Muster hinzugefügt habe. Dadurch wird sichergestellt, dass Ihre Regex mit einem Buchstaben (Kleinbuchstaben/Großbuchstaben), Dezimalzahlen und Punkten (.) übereinstimmt. Hoffe, das hilft :)

+0

Das wird nicht funktionieren. Auch nicht hilfreich, weil Sie nicht erklären, was vor sich geht. Stattdessen könnten Sie 10 Sekunden brauchen, um "warum" (erklären Sie die Regex) sowie die richtige Lösung (Hinweis: entfernen Sie die Leerzeichen) zu posten. Dann muss das OP nicht mehr hier posten, und andere Leute, die nach Antworten suchen, können lernen. – Robbie

+0

@Robbie aktualisiert –

+0

Danke. Hilfreicher! – Robbie