Redirect 301 funktioniert nicht wie es sollte

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

  • Redirect 301 funktioniert nicht wie es sollte

    Hallo,

    ich habe die URL Struktur einrer bestehende Seite geändert und dazu per .htaccess eine Weiterleitung eingerichtet. Diese funktioniert aber nicht. Hier ein Bsp. wie es ausschaut:
    RewriteEngine on
    Redirect 301 /index.php?s=Kontakt http://www.example.com/Kontakt

    Ist das so nicht korrekt? Sehr ihr da einen Fehler?

    Danke
    Zuletzt geändert von joextra; 24.08.2016, 10:16.
    Erfahrungen vererben sich nicht jeder muss sie allein machen.

  • #2
    Redirect hat nichts mit der RewriteEngine zu tun.

    Und Redirect betrachtet nur den Pfad-Bestandteil des URL, den Query-String kannst du damit nicht „abfragen“.

    Du brauchst eine RewriteRule, mit einer vorgeschalteten RewriteCond (zum checken des Query-Strings).
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      naja, ich habe es so gemacht wie in den ganzen Bsp die ich gefunden habe. Gibt es irgendwo ein Bsp. wie man das genau macht? Ich finde nur Beispiele wie das da oben.
      Zuletzt geändert von joextra; 23.08.2016, 17:15.
      Erfahrungen vererben sich nicht jeder muss sie allein machen.

      Kommentar


      • #4
        https://www.google.de/search?q=htacc...n+query+string
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Danke für den Link. Hat mir etwas weiter geholfen. Habe auch etwas rumprobiert, allerdings komme ich in meinem Fall einfach nicht weiter. Die URLs sehen so aus (alt/neu)
          http://www.example.com/index.php?s=blah -> www.example.com/blah
          http://www.example.com/index.php?s=blah;fasel] -> www.example.com/blah/fasel
          http://www.example.com/index.php?s=blah;fasel;foo -> www.example.com/blah/fasel/foo
          http://www.example.com/index.php?s=blah;fasel&id=123 -> www.example.com/blah/fasel/123

          im Prinzip müsste index.php?s= entfernt, und ; und &id= durch ein slash ersetzt werden. Leider schaffe ich es mit meinen geringen Kenntnissen in diesem Bereich nicht.
          Zuletzt geändert von joextra; 24.08.2016, 10:16.
          Erfahrungen vererben sich nicht jeder muss sie allein machen.

          Kommentar


          • #6
            Nach weiteren rumtesten, habe ich nun eine Lösung, frage mich aber ob man das nicht schöner machen kann. So sieht es jetzt aus:

            RewriteCond %{QUERY_STRING} ^site=blah$ [NC]
            RewriteRule ^index\.php$ /blah/? [R=301,NE,NC,L]
            RewriteCond %{QUERY_STRING} ^site=blah;fasel$ [NC]
            RewriteRule ^index\.php$ /blah/fasel/? [R=301,NE,NC,L]
            RewriteCond %{QUERY_STRING} ^site=blah;fasel;foo$ [NC]
            RewriteRule ^index\.php$ /blah/fasel/foo/? [R=301,NE,NC,L]
            RewriteCond %{QUERY_STRING} ^site=blah;fasel&id=123$ [NC]
            RewriteRule ^index\.php$ /blah/fasel/123/? [R=301,NE,NC,L]

            Jetzt frage ich mich ob man das ganze dynamisieren kann. Wenn ich das so mache wie da oben, müsste ich eine riesige Liste anlegen. Gibt es die Möglichkeit anstatt blah, fasel, ... Platzhalter zu benutzen, so das nur wenige Zeilen reichen?

            Danke
            Erfahrungen vererben sich nicht jeder muss sie allein machen.

            Kommentar


            • #7
              Warum willst du das überhaupt mit Rewrite machen? Wieso nicht mit PHP?

              Kommentar


              • #8
                Ich weiß nicht ob das überhaupt richtig klappen wird. Per URL rewriting bekommt doch PHP aus z.B. www.example.com/blah -> http://www.example.com/index.php?s=blah
                Wie soll ich dann überhaupt feststellen ob der User die neuen URL benutzt oder nicht?
                Zuletzt geändert von joextra; 24.08.2016, 10:17.
                Erfahrungen vererben sich nicht jeder muss sie allein machen.

                Kommentar


                • #9
                  Zitat von joextra Beitrag anzeigen
                  Ich weiß nicht ob das überhaupt richtig klappen wird. Per URL rewriting bekommt doch PHP aus z.B. www.seite.de/blah -> Homepage - SLine Jürgen Haubeil - SLine - Jürgen Haubeil
                  Wie soll ich dann überhaupt feststellen ob der User die neuen URL benutzt oder nicht?
                  Das URL-Rewriting vereinfachen und alle Anfragen direkt an PHP weiterleiten. In PHP kannst du dann die aufgerufene URL analysieren und dementsprechend reagieren.

                  Code:
                  RewriteEngine On
                  RewriteCond %{REQUEST_FILENAME} -s [OR]
                  RewriteCond %{REQUEST_FILENAME} -l [OR]
                  RewriteCond %{REQUEST_FILENAME} -d
                  RewriteRule ^.*$ - [NC,L]
                  RewriteRule ^.*$ index.php [NC,L]

                  Kommentar


                  • #10
                    also, das Rewrite das ich habe ist wesentlich kompakter:
                    RewriteCond %{REQUEST_FILENAME} !-f
                    RewriteRule ^([^-]*)$ /index.php?site=$1 [L]

                    Vielleicht fehlt es mir an Fantasie, aber ich kann mir nicht vorstellen, wie ich das in PHP analysieren sollte. Ich finde das hier http://www.php-resource.de/forum/fra...tml#post673008 einfacher, wenn man jetzt nur noch wüsste wie man das dynamisieren könnte, damit man es nicht für jeden Link extra schreiben müsste
                    Erfahrungen vererben sich nicht jeder muss sie allein machen.

                    Kommentar


                    • #11
                      Zitat von joextra Beitrag anzeigen
                      also, das Rewrite das ich habe ist wesentlich kompakter:
                      RewriteCond %{REQUEST_FILENAME} !-f
                      RewriteRule ^([^-]*)$ /index.php?site=$1 [L]
                      Vielleicht von der Code-Länge, aber es tut zu viel Unnötiges. Den GET-Parameter "site" brauchst du nicht, du hast ja die URL.

                      Kommentar


                      • #12
                        [QUOTE]Den GET-Parameter "site" brauchst du nicht, du hast ja die URL. /QUOTE]
                        Ohne funktioniert es aber nicht. Wir schweifen aber vom Thema ab. Weiß jemand wie ich oben genannte RewriteRule dynamisieren kann?
                        Erfahrungen vererben sich nicht jeder muss sie allein machen.

                        Kommentar


                        • #13
                          Zitat von joextra Beitrag anzeigen
                          Ohne funktioniert es aber nicht.
                          Warum nicht?

                          Kommentar


                          • #14
                            Da fragst du mich was. Ich habs ausprobiert und es tut nicht. Mehr kann ich dir leider nicht sagen, da ich mich damit nicht so gut auskenne.
                            Erfahrungen vererben sich nicht jeder muss sie allein machen.

                            Kommentar


                            • #15
                              Erst mal editiere bitte deine Posts, und entferne die Verlinkungen.
                              Btw., für Beispiele gibt es explizit die Domains example.com/.net/.org

                              Was @h3ll ansprach, alles an die index.php zu routen, ohne zusätzlichen GET-Parameter – das funktioniert naürlich nur, wenn das Script dann auch in dieser Hinsicht angepasst wird. Die Information darüber, was der Nutzer ursprünglich angefordert hat, findet sich in $_SERVER.

                              „Dynamisieren“ kann man RewriteRules natürlich - mittels regulärer Ausdrücke.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X