jonny: HTACCESS umschreiben, brauche Hilfe

Hi.
Bisher sieht meine HTACCESS so aus:

RewriteEngine On
AddDefaultCharset utf-8

DirectoryIndex index.php
RewriteBase  /

404 Fehler

ErrorDocument 404 /404-Fehler/

Die URL gerecht umbenennen

RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)?$ index.php?p=$1&id=$2&a=$3&b=$4&c=$5&d=$6
RewriteRule ^([a-zA-Z0-9-]+)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?([a-zA-Z0-9-]*)/?$ index.php?p=$1&id=$2&a=$3&b=$4&c=$5&d=$6

Encoding Type

AddCharset utf-8 .css .html .php

Ich möchte nun noch ergänzen das wenn die Adresse www.example.com lautet, auf example.com weitergeleitet wird.
Ich habe einiges probiert aber es scheint immer mit den bisher bestehneden Rewrite Rules zu kolidieren.

Habs so probiert:
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

  1. Ich möchte nun noch ergänzen das wenn die Adresse www.example.com lautet, auf example.com weitergeleitet wird.

    Das machst du mit der folgenden regel aber nicht - du leitest damit höchsten alls nach example.com um, was NICHT example.com entspricht - das ist eine völlig andere Situation.

    Habs so probiert:
    RewriteCond %{HTTP_HOST} !^example.com$ [NC]
    RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

    Ich habe einiges probiert aber es scheint immer mit den bisher bestehneden Rewrite Rules zu kolidieren.

    Definiere "einiges" - ohne die anderen Rewrite-Regeln zu sehen (die du hier - obwohl du es als Stammgast dieses Forums besser wissen solltest) tippe ich auf das L-Flag.

    1. Hey.

      Das machst du mit der folgenden regel aber nicht - du leitest damit höchsten alls nach example.com um, was NICHT example.com entspricht - das ist eine völlig andere Situation.

      Ich kenne mich null damit auf und es ist gerade sehr wichtig das ich das schnell ändere, bitte hilf mir also.

      Habs so probiert:
      RewriteCond %{HTTP_HOST} !^example.com$ [NC]
      RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

      Ich habe einiges probiert aber es scheint immer mit den bisher bestehneden Rewrite Rules zu kolidieren.

      Definiere "einiges"

      Einiges über Google... wie z.B. das obrige.

      Gruß, Jonny

      1. Ich kenne mich null damit auf und es ist gerade sehr wichtig das ich das schnell ändere, bitte hilf mir also.

        Wie dir schon oft gesagt wurde kommt deine fordernde Art bei potentiellen Helfern nicht gerade gut an - besonders drängeln und die Unbereitschaft etwas lernen zu wollen machen die Sache nicht besser.

        Weil ich so gutmütig bin, versuch' ich dennoch nochmal dir zu erklären was du tust, damit sich dein "ich kenn mich null aus" auf "ich weiß, was ich da tue" ändert.

        RewriteCond %{HTTP_HOST} !^example.com$ [NC]

        RewriteCond ist die Umschreib-Bedingung (Cond = Condition)
        %{HTTP_HOST} ist da HTTP Feld "HTTP_HOST" und enhält den Hostnamen mit dem der Request stattgefunden hat.

        ! negiert den Regulären Ausdruck
        ^ entspricht dem Anfang des Strings
        . entspricht einem beliebigen Zeichen
        $ entspricht dem Ende des Strings

        [] am Ende beinhaltet Flags
        Das NC-Flag steht für no case (= Groß- und Kleinschreibung ignorieren).

        Du prüfst also ob der HTTP_HOST NICHT exampleacom, examplebcom ... example1com, ExAmPLEZCOM usw ist. Darunter befindet sich auch irgedwann mal example.com - somit funktionierts auch augenscheinlich.

        Wie erwähnt ist der . ein beliebiges Zeichen. Wenn du wörtlich danach suchen möchtest, musst du den Punkt escapen.

        also !^example.com$ - dann gilt das Suchmuster definitiv NUR für ungleich 'example.com' und sonst nichts.

        Du hast aber eingangs erwähnt, dass du alles was mit www.example.com daherkommt umgeleitet werden soll

        Wenn du also Nach www.example.com suchen willst, sieht das so aus

        Rewrite-Bedingung
        auf Feld HTTP_HOST
        Stringanfang
        Zu suchendes Muster
        Stringende
        Groß- und Kleinschreibung ignorieren

        Ausgeschrieben heisst das also:

        RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]

        RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
        Einiges über Google... wie z.B. das obrige.

        "Einiges" ist sehr vage - diese Beschreibung ist mindestens so gut wie "funzt nicht".

        Wenn du wirklich 1x das machst, was man dir sagt, wirst du ggf. verstehen, dass es SINNVOLL ist eine ordentliche Fehlerbeschreibung abzugeben. Dabei rekapitulierst du deine eigenen Schritte - bei einer sinnvollen Fehlerbeschreibung ist es meisten so, dass du während dem Schreiben selbst auf die Lösung kommst (oder zumindst den Helfenden unnötige Postings ersparst in denen sie Vorschläge machen, die du sowieso schon ausprobiert hast). Genau aus dem Grund wird in diesem Forum so penibel verlangt, dass du eine entsprechende Bescheibung lieferst.

        Ich habe dich sogar darauf hingewiesen, das die Reihenfolge deiner Rewrite-Regeln wichtig ist und ich in diesem Zusammenhang auf das L-Flag tippe - das hast du aber gekonnt ignoriert und schwafelst anstatt dessen belangloses Zeug von "Einiges" und "Google".

        Du sagst selbst, die Sache ist dringend und wichtig - mit jeder unvollständigen Antwort deinerseits bzw. wo man dir jedes Wort aus der Nase ziehen musst, verzögerst du die Lösung des Problems aber nachhaltig (oder vereitelst diese gänzlich). Du kommst schneller ans Ziel, wenn du dir mehr Zeit zum Tippen (und Nachdenken) nimmst - das klingt zwar paradox, ist es aber beileibe nicht.

        So und jetzt noch "warnende Worte":

        Ich hätte in der Zeit, in der ich diese Antwort verfasst habe eigentlich die Küche zusammenräumen sollen, da meine Freundin jetzt Kuchen backen möchte. Anstatt dessen habe ich dir geantwortet - in der Hoffnung, du besserst dich und kannst hier im Forum etwas lernen und dazu beitragen, dass die Reaktionen auf deine Postings besser und vernünftiger werden. Es ist nicht so, dass dir keiner helfen will (viele konstruktive Antworten gibts ja auf deine Postings nicht) - viele verschwenden ihre Freizeit nur gerne sinnvoller, z.B. bei jemandem der die Hilfe zu würdigen weiß.

        Wenn mir von Beginn an klar ist, dass die Hilfestellung NICHTS bewirkt, habe ich auch keine Lust einen Roman zu verfassen (aktuell ist das eine Ausnahme) sondern fasse mich kurz und poste nur einen Link oder ignoriere den Post völlig.

        Also: lerne etwas aus dieser Nachricht, lies sie ggf. mehrmals und besser dich - sonst war das möglicherweise auch meine letzte Antwort auf Postings von dir.

        1. Wie dir schon oft gesagt wurde kommt deine fordernde Art bei potentiellen Helfern nicht gerade gut an - besonders drängeln und die Unbereitschaft etwas lernen zu wollen machen die Sache nicht besser.

          Ja du hast Recht.

          Weil ich so gutmütig bin,

          Danke dir.

          Ausgeschrieben heisst das also:

          RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]

          Hm wenn ich nun www.example.com eingebe, wird aber nicht auf example.com weitergeleitet. Und kann man es auch so machen das wenn ein Parameter dranhingen, diese mitübergeben werden und das die Domain Endung auch berücksichtigt wird?

          Wenn also z.B.
          www.exAmPlE.de/Kategorie/Parameter

          eingegeben wird, dann soll auf

          example.com/Kategorie/Parameter

          weitergeleitet werden.
          Also die Groß und Kleinschreibung wird ja ignoriert durch as [NC] aber wie bringe ich ihn dazu das die Endung .com sein _muss_ und kein www. am Anfang stehen _darf_ und die Parameter erhalten bleiben?

          Haber mal das www. weggelassen: RewriteCond %{HTTP_HOST} ^example.com$ [NC], aber das leitet auch nicht weiter / ändert um.

          Danke für deine Hilfe

          Gruß, Jonny

          1. Hm wenn ich nun www.example.com eingebe, wird aber nicht auf example.com weitergeleitet.

            Nur die Bedingung allein ist erst die halbe Miete.

            Und kann man es auch so machen das wenn ein Parameter dranhingen, diese mitübergeben werden und das die Domain Endung auch berücksichtigt wird?

            Das macht die RewriteRule - die du in der nächsten Zeile notiert hast/hattest - siehe unten.

            Also die Groß und Kleinschreibung wird ja ignoriert durch as [NC] aber wie bringe ich ihn dazu das die Endung .com sein _muss_ und kein www. am Anfang stehen _darf_ und die Parameter erhalten bleiben?

            ? quantifiziert den vorhergehenden ausdruck

            ^(www.)?example.com$

            Heisst so viel wie.

            Anfang des Strings
            (www.) 0 oder 1x
            gefolgt von example.com
            Ende des strings

            Das muster trifft also auf
            example.com und www.example.com zu

            Bei einer Umleitung auf example.com erzeugst du damit aber eine Endlosschleife.

            Ergo: definiere exakt, was du _wirklich_ machen möchtest.

            Die Rewrite-Regel geht auf den REQUEST_URI

            . ist ein beliebiges Zeichen, * entspricht 0 oder mehr Wiederholungen, () speichert das Muster bzw. erzeugt eine Untergruppe (in der Reihenfolge der Öffnenden Klammern - die erste Klammer ist 1, die zweite 2 usw.)

            ^(.*)$ entspricht also irgend einer Zeichenkette und leitet dies auf www.example.com um und hängt $1 (also die gefundene Zeichenkette) wieder an.