2010-02-12 10 views

Antwort

93
RewriteCond %{QUERY_STRING} book=(\w+)&page=(\d+) 
RewriteRule ^index.php /%1/%2? [L,R=301] 

Da RewriteRule sieht nur auf dem Weg (bis zu, aber das Fragezeichen nicht einschließlich), verwenden RewriteCond die Werte in dem Abfrage-String zu erfassen.

Beachten Sie, dass die Spiele von RewriteCond in %1 erfasst werden, %2 usw., anstatt $1, $2 usw.

beachten Sie auch die ? am Ende RewriteRule. Er teilt mod_rewrite mit, dass die ursprüngliche Abfragezeichenfolge nicht an die neue URL angehängt werden soll. Sie erhalten also /DesignPatterns/151 intead von /DesignPatterns/151?book=DesignPatterns&page=151.

Die [L,R=301] Fahnen zwei Dinge tun:

  1. L stellt sicher, dass keine anderen Regeln, die auf andere Weise bearbeitet werden könnten übereinstimmen (mit anderen Worten, es wird sichergestellt, das die „letzte“ Regel verarbeitet ist).
  2. R=301 bewirkt, dass der Server eine Weiterleitungsantwort zurücksendet. Anstatt das Programm erneut zu schreiben, wird der Client aufgefordert, es erneut mit der neuen URL zu versuchen. Die =301 macht es zu einem permanent redirect, so dass Suchmaschinen unter anderem wissen, die alte URL durch die neue URL in ihren Indizes zu ersetzen.
+10

+1 Ich liebe es, wenn eine vollständige Erklärung mit einer Antwort gegeben wird –

+1

Sie möchten wahrscheinlich auch das [L] -Flag, wenn Sie mehrere Umschreibungsregeln haben. Das Flag [L] stoppt die Verarbeitung, nachdem die Regel abgeglichen wurde, und das Flag [R] schließt es NICHT implizit ein. – TheJosh

+1

Die $ vs% brachten mich um. Ich hatte keine Ahnung. Vielen Dank! – keithwyland

Verwandte Themen