PHP to .htaccess

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP to .htaccess

    Geschätzte Community

    Ich möchte seit längerem eine Weiterleitung aus PHP in .htaccess umbauen.
    Leider gelingt es mir überhaupt nicht.

    Der funktionierende PHP Code lautet:
    PHP-Code:
    [COLOR=#000000][COLOR=#007700]if( [/COLOR][COLOR=#0000bb]strpos[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$_SERVER[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'HTTP_HOST'[/COLOR][COLOR=#007700]], [/COLOR][COLOR=#dd0000]"www.hallo"[/COLOR][COLOR=#007700]) === [/COLOR][COLOR=#0000bb]false [/COLOR][COLOR=#007700]){[/COLOR]
    [COLOR=#0000bb] $lk [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]array_reverse[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]explode[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"."[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]$_SERVER[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'HTTP_HOST'[/COLOR][COLOR=#007700]]));[/COLOR]
    [COLOR=#0000bb] header[/COLOR][COLOR=#007700]([/COLOR][COLOR=#dd0000]"Location: http://www.hallo."[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]$lk[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000bb]$_SERVER[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'REQUEST_URI'[/COLOR][COLOR=#007700]],[/COLOR][COLOR=#0000bb]TRUE[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000bb]301[/COLOR][COLOR=#007700]);[/COLOR]
    [COLOR=#007700] exit(); [/COLOR]
    [COLOR=#007700]} [/COLOR]
    [/COLOR]

    Ich habe drei Domain Namen:
    example.landeskennung (.de .ch .at .com .us .cc .org .net usw...)
    example1.landeskennung (.de .ch .at .com .us .cc .org .net usw...)
    example2.landeskennung (.de .ch .at .com .us .cc .org .net usw...)

    Wenn die Domain nicht [COLOR=#1d5b80]www.example[/COLOR].landeskennung lautet, so soll auf die Domain [COLOR=#1d5b80]www.example[/COLOR].landeskennung umgeleitet werden.
    Jedoch soll die Landeskennung beibehalten werden.

    BSP:
    [COLOR=#1d5b80]http://www.example1.de[/COLOR] => [COLOR=#1d5b80]http://www.example.de[/COLOR] umleiten
    [COLOR=#1d5b80]http://www.example1.com[/COLOR] => [COLOR=#1d5b80]http://www.example.com[/COLOR] umleiten
    [COLOR=#1d5b80]http://www.[COLOR=#1d5b80]example1[/COLOR].[/COLOR]ch => [COLOR=#1d5b80]http://www.example.ch[/COLOR] umleiten
    usw... mit .at .info .net .org .cc .us usw...

    zusätzlich soll immer das www vorne dran stehen...
    [COLOR=#1d5b80]http://example.de[/COLOR] => [COLOR=#1d5b80]http://www.example.de[/COLOR] umleiten


    Da es sehr viele Domains mit vielen Landeskennungen sind kann ich nicht einfach alle abfragen so quasi ein switch machen.

    Es soll als die $lk = array_reverse(explode(".", $_SERVER['HTTP_HOST'])); in .htaccess umgeschrieben werden.

    Ich habe es bereits damt versucht:
    PHP-Code:
    HcgiPhpProfileName php5 example
    RewriteCond 
    %{HTTP_HOST} .
    RewriteCond %{HTTP_HOST} !^www\.example  [OR]
    RewriteCond %{HTTP_HOST} ^example1  [OR]
    RewriteCond %{HTTP_HOST} ^example2
    RewriteRule 
    (.*) http://www.example/$1 [R=301,L]
    RewriteEngine On
    RewriteBase 
    /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond 
    %{REQUEST_FILENAME} !-d
    RewriteCond 
    %{REQUEST_FILENAME} !-l
    RewriteRule 
    .* index.php [L
    Für Vorschläge und Hinweise bin ich sehr dankbar
    Mit besten Grüssen aus Zürich
    Roger
    Zuletzt geändert von sero; 14.04.2011, 10:58.

  • #2
    Bitte erst mal Posting in dieser Hinsicht anpassen: http://www.php-resource.de/forum/php...ts.html#domain

    Und dann beschreibe bitte, was du bereits probiert hast.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Danke für den Hinweis: Umgesetzt

      Kommentar


      • #4
        Hallo,

        bei den RewriteConds gibt man sowieso reguläre Ausdrücke an, also kann man die Alternativen auch gleich als z. B. (www\.)?example(\d?)\.(com|net|org) in einem Pattern zusammenfassen.

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Herzlichen Dank für deine Antwort Amica

          Dein Input ist sehr wertvoll.
          Leider habe ich es noch nicht zum laufen gebracht.
          Dies ist mein Code:
          Code:
          HcgiPhpProfileName php5 test
          RewriteEngine On
          RewriteCond %{HTTP_HOST} !^(www\.)?example(\d?)\.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info)$
          RewriteRule ^(.*)$ http://www.example/$1 [R=301,L] 
           
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteCond %{REQUEST_FILENAME} !-l
          RewriteRule .* index.php  [L]
          Eine andere Variante welche leider auch nicht funktioniert ist:
          Code:
          HcgiPhpProfileName php5 test
          RewriteEngine On
          
          RewriteCond %{HTTP_HOST} !^(www.example.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info))$
          RewriteRule ^(.*)$ http://www.example/$1 [R=301,L]
          Hast du oder sonst jemand eine Idee was ich falsch mache?
          Beste Grüsse
          Roger
          Zuletzt geändert von AmicaNoctis; 14.04.2011, 23:44. Grund: PHP-Tags in Code-Tags geändert, da sonst Backslashes verschluckt werden

          Kommentar


          • #6
            Alle möglichen ccTLD einzeln aufzuführen, erscheint mir ziemlich überflüssig, wenn du den gleichen Wert eh wieder anhängen willst.
            Da würde ich eher auf ([a-z]+) hinter dem Punkt matchen lassen, und das dann wieder hinter dem example anfügen.

            PHP-Code:
            RewriteRule ^(.*)$ http://www.example/$1 [R=301,L] 
            Jetzt hast du die Endung ganz unter den Tisch fallen lassen - www.example ist sicherlich nicht deine Domain.

            Außerdem musst du schon auf das, was du beim HTTP_HOST zu matchen versucht, in der Ersetzung Bezug nehmen, wenn du dort die Endung wieder anfügen willst.
            Dazu müsstest du aber erst mal eine positive RewriteCond formulieren - denn wenn du dort nur verlangst, dass der Host einem bestimmten Muster nicht entsprechen soll, gibt es anschließend logischerweise auch keine Treffer, auf die du dich beziehen könntest.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              @wahsaga

              ganz herzlichen Dank für deinen Vorschlag.

              Ich habe mal weiter getestet:
              PHP-Code:
              RewriteCond %{HTTP_HOST} !^www\.example$ [NC]
              RewriteRule ^(.*)$ http://www.example$1 [R=301,L] 
              Die Überlegung ist, alles was hinter example, wie von dir Vorgeschlagen, steht an die Weitergeleitete URL anzuhängen...
              Das funktioniert teils:
              - w_ww.example.at/de/home/? wird zu w_ww.examplede/home/? auch hier fehlt wieder die Landeskennung
              - example.at/de/home/? wird zu w_ww.examplede/home/? auch hier fehlt wieder die Landeskennung aber das www wird richtig angehängt.

              Ein weiterer Test:
              PHP-Code:
              RewriteCond %{HTTP_HOST} !^www\.example\.([a-z]+)$ [NC]
              RewriteRule ^(.*)$ http://www.example%1/$1 [R=301,L] 
              Leider ist auch hier %1 ... %3 leer...
              Irgendwie fehlt da einfach ein Detail.

              Für weitere Inputs bin ich sehr dankbar.
              Grüsse Roger
              Zuletzt geändert von sero; 15.04.2011, 14:44.

              Kommentar


              • #8
                Du hast immer noch ein Ausrufezeichen vor dem Ausdruck. Wahsaga schrieb bereits, dass du damit nur Domains matcht, die nicht dem regulären Ausdruck entsprechen.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  Btw., du verlinkst immer noch Domains, die dafür nicht vorgesehen sind. example.com/.net/.org sind vorgesehene Beispieldomains, nicht example plus beliebige TLD.
                  Deaktivere doch bitte wenigstens die automatische Link-Umwandlung, wenn du solche Beispiele postest.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Zitat von AmicaNoctis Beitrag anzeigen
                    die nicht dem regulären Ausdruck entsprechen.
                    Der Teil ist schon richtig so, denn im richtigen Case wird die Rule angewendet. Nur die Landeskennung wird nicht kopiert.

                    Trotzdem Danke für den Hinweis

                    Kommentar


                    • #11
                      Zitat von sero Beitrag anzeigen
                      Der Teil ist schon richtig so, denn im richtigen Case wird die Rule angewendet. Nur die Landeskennung wird nicht kopiert.
                      Du hast es immer noch nicht verstanden:

                      Ja, es mag sein, dass die RewriteCond in so fern „richtig“ ist, dass die nachfolgende RewriteRule nur dann angewendet wird, wenn der Hostname nicht dem Muster ^www.example.([a-z]+)$ entspricht.

                      Allerdings gibt es in diesem Fall dann auch keine back reference, die eine per ([a-z]+) gematchte Länderkennung enthalten würde - weil die Bedingung ja gerade verlangt, dass das Suchmuster nicht gefunden wurde.

                      Du kannst dich nicht in der RewriteRule auf etwas beziehen, von dem du in der RewriteCond verlangst, dass es bitte nicht vorhanden sein soll.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Zitat von wahsaga Beitrag anzeigen
                        Btw., Deaktivere doch bitte wenigstens die automatische Link-Umwandlung, wenn du solche Beispiele postest.
                        Das Männchen in der Maschine macht die automatisch hin, auch wenn ich die Links entferne...
                        Habe nun w_ww. eingefügt, so gehts...

                        Kommentar


                        • #13
                          Zitat von wahsaga Beitrag anzeigen
                          Du kannst dich nicht in der RewriteRule auf etwas beziehen, von dem du in der RewriteCond verlangst, dass es bitte nicht vorhanden sein soll.
                          Ah, das macht natürlich Sinn...
                          Also andere Strategie anwenden ohne !

                          Dann hat natürlich auch Amica Recht...

                          Kommentar


                          • #14
                            Zitat von sero Beitrag anzeigen
                            Das Männchen in der Maschine macht die automatisch hin, auch wenn ich die Links entferne...
                            Das Männchen in der Maschine lässt sich durch die Checkbox
                            [ ] Links automatisch umwandeln
                            unter dem Beitragsformular sagen, was es machen soll.

                            Wenn du allerdings einen Beitrag editierst, in dem schon die [URL]-Tags drin stehen, weil du beim ersten Mal vergessen hast, dem Männchen deinen Wunsch nach Nichtverlinkung mitzuteilen - dann musst du die selber wieder entfernen, bevor du das wieder abspeicherst. (Und die Checkbox über „erweitert“ auch wieder deaktivieren.)

                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              Lösung des Problems

                              Die Lösung des Problems lautet:

                              PHP-Code:
                              RewriteCond %{HTTP_HOST} ^www\.(example1|example2).([a-z]+)$ [NC]
                              RewriteRule ^(.*)$ http://www.example.%2/$1 [R=301,L] 
                              Ganz herzlichen Dank an Amica und wahsaga für eure Hilfe und auch an die Community.

                              Besten Dank
                              Roger

                              Kommentar

                              Lädt...
                              X