2016-04-24 18 views
1

Ich habe ein Problem in meiner URL.URL Umleitung von _ zu - htaccess

Dies ist mein Code in .htaccess:

RewriteRule ^music-(.*)-([0-9_]+)\.html$ /artiste.php?g=$1&page=$2 [NC,L] 

So einige URL auf Google oder Bing könnte wie diese music_(.*)_([0-9_]+)\.html zeigen werden, wenn möglich Ich möchte _-- mit .htaccess ändern.

Ich mag jede URL mit _-- zu ändern, da alle Verbindungen mit - korrekt arbeiten, aber in meiner Forschung einiger URLs haben _ so mag ich sie mit - ersetzen. Beispiel:

Fehler: http://www.example.com/me_like_this.html Richtig: http://www.example.com/me-like-this.html

Antwort

0
RewriteEngine On 
RewriteRule ^(.*)_(.*)$ /$1-$2 [L,R=301] 
RewriteRule ^music-(.*)-([0-9_]+)\.html$ /artiste.php?g=$1&page=$2 [NC,L] 

Bitte versuchen Sie dies.

+2

Das Problem dabei ist, dass der Browser mehrere Male umleiten müsste, bis alle Unterstriche verschwunden sind. Besser, die Konvertierung intern zu machen. –

1

Sie können in Ihrer /.htaccess Datei die folgende verwenden:

RewriteEngine On 

# Replace underscores with hyphens, set the environment variable, 
# and restart the rewriting process. This essentially loops 
# until all underscores have been converted to hyphens. 

RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=underscore:yes,N] 

# Then, once that is done, check if the underscore variable has 
# been set and, if so, redirect to the new URI. This process ensures 
# that the URI is rewritten in a loop *internally* so as to avoid 
# multiple browser redirects. 

RewriteCond %{ENV:underscore} yes 
RewriteRule (.*) /$1 [R=302,L] 

Dann fügen Sie Ihre Regel danach:

RewriteRule ^music-(.+)-(\d+).html$ /artiste.php?g=$1&page=$2 [NC,L] 

Wenn dies für Sie arbeitet, und Sie möchten, dass die machen Weiterleitungen, die von Browsern und Suchmaschinen zwischengespeichert werden, ändern Sie 302 zu 301.

Hinweis: In Ihrem RewriteRule ich .*-.+ geändert habe, so dass nur sie paßt eine oder mehr Zeichen, statt null oder mehr Zeichen. Zusätzlich habe ich [0-9_]+ zu \d+ geändert, das die Abkürzung entspricht, ohne Unterstreichungen einzuschließen, die sowieso in Bindestriche umgewandelt würden. Wenn Sie in die letzte Erfassungsgruppe Bindestriche einfügen möchten, ändern Sie (\d+) in ([\d-]+).