ChrisB: mod_rewrite Umleitung von Nicht-www auf www

Beitrag lesen

Hi,

RewriteCond %{HTTP_HOST} [1](.+)$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]


>   
> Ich weiß, ich muss mich noch mehr mit RegEx auseinandersetzen. Aber kannst Du mir erklären, wo der Fehler ist? In diesem Fall wird aus http://example.org http://www.xample.org. Das erste Zeichen der Domain wird also "verschluckt".  
  
Die eckigen Klammern definieren eine Zeichenklasse.  
Du verlangst also mit deinem Ausdruck, dass der HTTP\_HOST mit einem Zeichen beginnen soll, dass keine (, kein w, kein w, kein w, kein \, kein Punkt und keine ) sein soll. (Die Sonderbedeutung der meisten Sonderzeichen, wie bspw. des Punktes, ist innerhalb einer Zeichenklasse aufgehoben - deshalb ist der \ dort m.W. auch kein maskierendes Zeichen.)  
  
Nun, example.com erfüllt das - das e ist ein Zeichen, dass nicht in dieser Zeichenklasse liegt. Und der nach diesem Zeichen folgende Rest ist xample.com - der wird jetzt von (.+) gematcht, und wegen der Klammerung als %1 zurückgeliefert.  
  
MfG ChrisB  
  

-- 
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?

  1. ^(www.) ↩︎