2015-03-13 14 views
5

Es gibt ein paar similarquestions auf SO, aber keine, die für dieses spezifische Szenario funktionieren.Ersetzen Sie alle Schrägstriche durch Bindestriche

Ich möchte alle Schrägstriche in einem URL-Pfad mit Bindestrichen ersetzen, mit mod_rewrite.

Also https://stackoverflow.com/foo/bar/baz sollte umleiten zu https://stackoverflow.com/foo-bar-baz.

Es könnte eine beliebige Anzahl von Segmenten im Pfad (zwischen Schrägstrichen) geben.

Ich denke, die Lösung beinhaltet die N flag, aber jeder Versuch, den ich gemacht habe, führt zu einer Endlosschleife.

+0

Welche Version von Apache? – hjpotter92

+0

http://stackoverflow.com/questions/28849327/removing-whitespaces-or-20-in-url-using-htaccess – CBroe

+0

@ hjpotter92 2.4 – ank

Antwort

4

Sie können diese 2 Regeln in Ihrem Stamm .htaccess verwenden:

RewriteEngine On 
RewriteBase/

RewriteRule ^([^/]+)/([^/]+)/?$ $1-$2 [NE,L,R=302] 

RewriteRule ^([^/]+)/(.+)$ $1-$2 

Dies wird umleiten example.com/foo/bar/baz/abc/xyz/123 zu example.com/foo-bar-baz-abc-xyz-123

+0

das funktioniert perfekt - können Sie es erklären, also warum die zwei Schritte? – ank

+1

Ja sicher. Die erste Regel wird nur dann ausgeführt, wenn nur ein Schrägstrich zum Ersetzen vorhanden ist, und wird bis zum letzten '/' übersprungen. Die zweite Regel wird mehrfach ausgeführt und ersetzt jedes '/' durch '-', bis ein'/'übrig ist. – anubhava

+0

Warum wird der zweite Befehl mehrere Male ohne das Flag "N" ausgeführt? – ank

Verwandte Themen