Konrad L. M. Rudolph: [mod_rewrite] Kanonische URI: „www“ verhindern

Moin,

ich möchte meine URIs kanonisieren und daher verhindern, dass sie mit dem Präfix „www“ versehen werden. Folgendes URI-Rewrite will leider nicht funktionieren:

  
RewriteCond %{HTTP_HOST} ^www\.example\.com$  
RewriteRule (.*) http://example.com/$1 [R=permanent,L]  

Das klappt zwar prinzipiell; sobald ich aber per URI auf ein Verzeichnis verweise, in welchem sich anderen Rewrite-Regeln befinden, dann wird die obenstehende Anweisung ignoriert, selbst, wenn gar keine der Regeln im Zielverzeichnis angewandt wird.

Ich vermute also, dass die bloße Anwesenheit der 'RewriteRule'-Anweisungen im Unterverzeichnis das Umleiten stört. Sobald ich all die Regeln auskommentiere, funktioniert es. Nur die 'RewriteEngine'-Anweisung auszukommentieren reicht hingegen nicht, obwohl dann keine der folgenden Regeln im Unterverzeichnis ausgeführt wird.

Weiß jemand, woran das liegen könnte?

lg, Konrad -

--
“It’s a question of style … Sloppy work tends to be habit-forming.”
– Silk in /Castle of Wizardry/ by David Eddings.
  1. Übersetzung in "Menschlich/Deutsch":

    RewriteCond %{HTTP_HOST} ^www.example.com$

    Passt der HTTP_HOST (also von http://de.wikipedia.org/wiki/Wikipedia der Teil "de.wikipedia.org") auf "www.example.com"?

    RewriteRule (.*) http://example.com/$1 [R=permanent,L]

    Dann schreibe alles, was nach dem trailing slash kommt (also "wiki/Wikipedia" aus obigen Beispiel) ans Ende von  "http://example.com/" und leite den werten User weiter mit Permanent-Code, wobei dies die letzte Regel war (Auswirkungen siehe http://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#rewriterule). Habe das nie gebraucht bzw. verstehe nicht wozu man es konkret gebrauchen könnte, kann mir also kein Szenario vorstellen, in dem das für mich nützlich wäre. Bin daher mal einfach der Ansicht, dass das L das Problem darstellen könnte.

    Das klappt zwar prinzipiell; sobald ich aber per URI auf ein Verzeichnis verweise, in welchem sich anderen Rewrite-Regeln befinden, dann wird die obenstehende Anweisung ignoriert, selbst, wenn gar keine der Regeln im Zielverzeichnis angewandt wird.

    Habe ich das richtig verstanden?
    http://www.example.com/dir/index.htm und in dir ist nochmal eine .htaccess?

    Weiß jemand, woran das liegen könnte?

    Ohne die Rules und Conds in dem Unterverzeichnis kA

    Ein paar Beispiele für Anfragen und entsprechende Umleitungen wären noch hilfreich :)

    1. Moin,

      RewriteRule (.*) http://example.com/$1 [R=permanent,L]
      Dann schreibe alles, was nach dem trailing slash kommt (also "wiki/Wikipedia" aus obigen Beispiel) ans Ende von  "http://example.com/" und leite den werten User weiter mit Permanent-Code, wobei dies die letzte Regel war (Auswirkungen siehe http://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#rewriterule). Habe das nie gebraucht bzw. verstehe nicht wozu man es konkret gebrauchen könnte, kann mir also kein Szenario vorstellen, in dem das für mich nützlich wäre. Bin daher mal einfach der Ansicht, dass das L das Problem darstellen könnte.

      Also, das „L“ hat ganz konkrete Anwendungen und ich habe es auch schon gebraucht um zu verhindern, dass weitere Redirects ausgeführt werden. Und im vorliegenden Fall soll es auch die letzte Regel sein, wobei sie das auch ohne „L“ sowieso sein sollte, da danach ja das 301 gesandt wird.

      Ist aber auch egal: Weglassen des „L“ führt hier auch zu nichts. :-/

      Habe ich das richtig verstanden?
      http://www.example.com/dir/index.htm und in dir ist nochmal eine .htaccess?

      Na ja, ohne „index.htm“ (oder dergleichen), aber ansonsten ja.

      Weiß jemand, woran das liegen könnte?
      Ohne die Rules und Conds in dem Unterverzeichnis kA

      Bitte sehr:

        
      RewriteBase /my  
      RewriteRule ^key$ key.pub.asc [T=text/plain]  
      RewriteRule ^id$ phpmyid/MyID.config.php  
      RewriteRule ^ids$ ids.xrds  
      
      

      Und bevor die Vermutung kommt: Nein, es liegt nicht am 'RewriteBase', wenn ich das weglasse, ist das Verhalten identisch.

      Ein paar Beispiele für Anfragen und entsprechende Umleitungen wären noch hilfreich :)

      Öh, sicher, dass Du den Sinn des Redirects verstanden hast? Dann sollte sich das erübrigen … aber na gut:

      http://example.com/             => [Kein Redirect]
      http://www.example.com/         => http://example.com/
      http://example.com/abc/         => [Kein Redirect]
      http://www.example.com/abc/     => http://example.com/abc/
      http://www.example.com/abc/?f=b => http://example.com/abc/?f=b
      http://www.example.com/nichtda/ => http://example.com/nichtda/
      http://www.example.com/my/      => [Kein Redirect]

      Wobei die ersten sechs Zeilen gewolltes Verhalten sind, die letzte Zeile ist der Fehler, hier sollte ein Redirect nach http://example.com/my/ erfolgen. Im Ordner „my“ befindet sich eine .htaccess-Datei mit 'RewriteRule's, im Ordner „abc“ befindet sich ebenfalls eine .htaccess-Datei, aber ohne Rewrites. „nichtda“ existiert nicht.

      lg, Konrad -

      --
      “It’s a question of style … Sloppy work tends to be habit-forming.”
      – Silk in /Castle of Wizardry/ by David Eddings.
  2. Hallo Konrad

    RewriteCond %{HTTP_HOST} ^www.example.com$
    RewriteRule (.*) http://example.com/$1 [R=permanent,L]

      
    Ich nehme folgendes ...  
      
    RewriteBase /  
    RewriteCond  %{HTTP\_HOST} "^(.\*).example\.tld$"  
    RewriteRule "^(.\*)" "http://example.tld/$1"  
      
    
    > [R=permanent,L]  
      
    Du hast recht, eigentlich müsste das noch rein.  
      
    Herzliche Grüße  
    Wolfgang