Chumprohn hat geschrieben:sprechende URLs
[…]
Ich frage mich nun, ob das Anhängsel "[R=301,L,P]" überhaupt richtig
Der Sinn einer sprechenden URL ist, die interne Verarbeitung vor der Außenwelt zu verstecken. Wenn du mit [R] eine externe Weiterleitung einrichtest, dann ist die ganze Umschreiberei nutzlos, weil mit jedem Aufruf der sprechenden URL der Browser bzw. Robot nur die Antwort bekommt, er möge doch bitte nochmals die interne URL aufrufen. Und speziell mit dem Code 301 führst du die ganze Sache restlos ad absurdum, weil dann zu obigem noch die Aussage hinzukommt, die sprechende
URL existiere nicht mehr.
Kurz: Der R-Parameter hat bei sprechenden URLs, also beim Umschreiben von statischen URLs auf interne, dynamische URLs, nichts zu suchen.
Die Verwendung des L-Parameters (L wie last, d.h. letzte Regel) hängt davon ab, ob die URL noch weiter von mod_rewrite verarbeitet werden soll. In der Regel ist das nicht der Fall, deshalb taucht L meist auf. Das hat aber letztlich nichts mit sprechenden URLs zu tun.
Der P-Parameter zu guter Letzt dient dazu, Seiten von einem anderen Webserver im eigenen URL-Bereich zu spiegeln: P wie Proxy. Hat eigentlich noch weniger mit sprechenden URLs zu tun.
RewriteRule ^keyword/[^/]+-([0-9]{1,2})/.*$ /search.php?site=$1 [R=301,L,P]
Dieser spezielle Fall, eine Suchfunktion, ist nun allerdings wiederum einer, bei dem statische (sprechende) URLs reichlich fehl am Platze sind. Keine Suchmaschine möchte Ergebnislisten deiner Suchfunktion haben, Ergebnisse, die irgendein Benutzer für sich angefordert hat und die für andere Leute weitestgehend uninteressant sind. Suchen können Suchmaschinen selber.
Das Fragezeichen in der URL ist ausdrücklich für Fälle gedacht, in denen ein Benutzer eine speziell auf ihn zugeschnittene, temporäre Seite abruft - wie eben bei einer Suchfunktion. Aus genau diesem Grund wurden Fragezeichen-URLs bis vor einigen Jahren von Suchmaschinen ignoriert, diese URLs bzw. die Seiten sind für die Allgemeinheit per Definition uninteressant. Suchmaschinen wurden erst dazu gezwungen, Fragezeichen-URLs aufzunehmen, als mit dem Aufkommen von PHP die Unsitte zunahm, statische Inhalte über URLs à la index.php?seite=e902903 auszuliefern.
ob man die Regel nur so gestalten muss, sofern es sich um ein altes Projekt handelt, dass eine neue URL-Struktur verpasst bekommen soll?
Wenn man alte URLs durch neue ersetzen möchte, muss zwar R=301 eingesetzt werden (genau dafür ist 301 da), aber dann muss die Funktion auch genau andersrum aussehen. Nicht
RewriteRule neu index.php?alt , sondern
RewriteRule index.php?alt neu. Darüber hinaus muss verhindert werden, dass diese Regel selbst erzeugte interne URLs in die Finger kriegt, weil's sonst eine Endlosschleife gibt.