2015-03-13 20 views
5

Jest kilka similarquestions na SO, ale żadne nie działają dla tego konkretnego scenariusza.Zastąp wszystkie ukośne kreski kreskami

Chcę zamienić wszystkie przednie ukośniki w ścieżce adresu URL za pomocą myślników, używając mod_rewrite.

Tak więc https://stackoverflow.com/foo/bar/baz powinien przekierować na numer https://stackoverflow.com/foo-bar-baz.

Na ścieżce może znajdować się dowolna liczba segmentów (między ukośnikami).

Myślę, że rozwiązanie obejmuje N flag, ale każda próba, którą podjąłem, skutkuje nieskończoną pętlą.

+0

Której wersji Apache? – hjpotter92

+0

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

+0

@ hjpotter92 2.4 – ank

Odpowiedz

4

można wykorzystywać te 2 reguły w .htaccess root:

RewriteEngine On 
RewriteBase/

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

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

To przekieruje example.com/foo/bar/baz/abc/xyz/123 do example.com/foo-bar-baz-abc-xyz-123

+0

działa to idealnie - czy jesteś w stanie to wyjaśnić, czyli dlaczego te dwa kroki? – ank

+1

Tak, na pewno. Pierwsza reguła będzie wykonywana tylko wtedy, gdy istnieje tylko ukośnik, który ma zostać zastąpiony, więc zostanie pominięty do ostatniego '/'. Druga reguła będzie wykonywać wielokrotnie wielokrotną zamianę każdego '/' o '-', aż pozostanie jeden' ​​/ '. – anubhava

+0

Dlaczego ten drugi nadal wykonuje wiele razy bez flagi 'N'? – ank