SebastianK: .htaccess redirect 301 nach Umzug von Typo3 auf Wordpress: index.php?id=xyz wird durchgeschleift

problematische Seite

Hallo zusammen,

ich habe eine neue Website unter Wordpress angelegt (https://weiherhofgrundschule.de), die automatisch eine .htaccess mit folgendem Inhalt generiert hat:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

So weit, so normal.

Nun liegt auf dem gleichen Root-Verzeichnis auch noch die alte URL, die ziemlich gut in Google gelistet ist, weshalb ich alle bisherigen Seiten per 301-redirect auf die korrekten neuen Seiten verweisen lassen möchte.

Das Problem ist, dass in meiner alten Typo3-Instanz alle Seiten nach dem Muster index.php?id=xyz lauteten und ich nun also erreichen möchte dass z.B. https://www.weiherhof-gs.fr.schule-bw.de/index.php?id=ferien-kalender-grundschule auf https://weiherhofgrundschule.de/aktuelles-von-der-weiherhof-grundschule/ferienkalender/ verweist.

Ich habe nun in der automatisch von Wordpress generierten .htaccess mit obigem Inhalt zusätzlich (und zwar davor) mehre Zeilen nach folgendem Muster eingefügt:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.weiherhof-gs\.fr\.schule-bw\.de$ [NC]
Redirect 301 /index.php?id=ferien-kalender-grundschule https://weiherhofgrundschule.de/aktuelles-von-der-weiherhof-grundschule/ferienkalender/
Redirect 301 /index.php?id=kontakte-personen-weiherhof https://weiherhofgrundschule.de/unsere-schule/kontakt/

etc.

Das Ergebnis ist jedoch leider kein 301-redirect, sondern eine Durchschleifung des "?id=ferien-kalender-grundschule" auf dier Startseite der neuen weiherhofgrundschule.de.

Gibt es irgendwen, der mir hier evtl. behilflich sein könnte?

Vielen Dank und herzliche Grüße Sebastian

  1. problematische Seite

    Tach!

    Ich habe nun in der automatisch von Wordpress generierten .htaccess mit obigem Inhalt zusätzlich (und zwar davor) mehre Zeilen nach folgendem Muster eingefügt:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} ^www\.weiherhof-gs\.fr\.schule-bw\.de$ [NC]
    Redirect 301 /index.php?id=ferien-kalender-grundschule https://weiherhofgrundschule.de/aktuelles-von-der-weiherhof-grundschule/ferienkalender/
    Redirect 301 /index.php?id=kontakte-personen-weiherhof https://weiherhofgrundschule.de/unsere-schule/kontakt/
    
    etc.
    

    Das Ergebnis ist jedoch leider kein 301-redirect, sondern eine Durchschleifung des "?id=ferien-kalender-grundschule" auf dier Startseite der neuen weiherhofgrundschule.de.

    Rewrite und Redirect arbeiten nicht zusammen. Die RewriteCond zieht nicht für die Redirect-Anweisungen. Du müsstest das andersrum lösen und per RewriteCond das Ausführen der RewriteRule-Anweisungen verhindern, die nicht für die alte Domain gültig sein sollen.

    dedlfix.

    1. problematische Seite

      Hallo dedlfix!

      Vielen Dank für diue superschnelle Antwort!

      Rewrite und Redirect arbeiten nicht zusammen. Die RewriteCond zieht nicht für die Redirect-Anweisungen.

      Das war die Empfehlung des Supports vom Serverbetreiber 🙄

      Du müsstest das andersrum lösen und per RewriteCond das Ausführen der RewriteRule-Anweisungen verhindern, die nicht für die alte Domain gültig sein sollen.

      Was heißt das konkret? Welche RewriteRule soll ich verhindern und wie mache ich das? Ist die Reihenfolge hierbei wichtig? Und kann ich bei den redirects sowohl RewriteEngine On als auch die RewriteCond weglassen?

      Vielen Dank! Sebastian

      1. problematische Seite

        Tach!

        Du müsstest das andersrum lösen und per RewriteCond das Ausführen der RewriteRule-Anweisungen verhindern, die nicht für die alte Domain gültig sein sollen. Was heißt das konkret? Welche RewriteRule soll ich verhindern und wie mache ich das? Ist die Reihenfolge hierbei wichtig?

        Du möchtest, dass die Redirect-Anweisungen bei bestimmten Requests ziehen. Also musst du für diese Requests das Rewriting verhindern, damit das Rewriting beim Redirect nicht dazwischenfunkt.

        Du kannst aber auch mit RewriteRules redirecten, wenn du das Flag R angibst. Vielleicht hat der Support das so gemeint.

        Ansonsten weiß ich aber nicht, welche Rolle die Reihenfolge spielt. Vielleicht zieht Redirect vor Rewrite. Aber da du es nicht weiter einschränken kannst, wirst du wohl eher nur Rewriting (mit R-Flag) nehmen wollen.

        Und kann ich bei den redirects sowohl RewriteEngine On als auch die RewriteCond weglassen?

        Ja, RewriteEngine wirkt nur auf die Rewriting Engine, nicht auf Redirecting und Direktiven anderer Module. Und RewriteCond wirkt nur auf die nächste nachfolgende RewriteRule.

        dedlfix.

        1. problematische Seite

          Hallo nochmal,

          Du kannst aber auch mit RewriteRules redirecten, wenn du das Flag R angibst. Vielleicht hat der Support das so gemeint.

          Ansonsten weiß ich aber nicht, welche Rolle die Reihenfolge spielt. Vielleicht zieht Redirect vor Rewrite. Aber da du es nicht weiter einschränken kannst, wirst du wohl eher nur Rewriting (mit R-Flag) nehmen wollen.

          Und kann ich bei den redirects sowohl RewriteEngine On als auch die RewriteCond weglassen?

          Ja, RewriteEngine wirkt nur auf die Rewriting Engine, nicht auf Redirecting und Direktiven anderer Module. Und RewriteCond wirkt nur auf die nächste nachfolgende RewriteRule.

          Ich habe das jetzt mal für eine Seite so gemacht:

          RewriteEngine On
          RewriteCond %{HTTP_HOST} ^www\.weiherhof-gs\.fr\.schule-bw\.de$ [NC]
          RewriteRule ^/index.php?id=ausserunterrichtliche-angebote?$ https://weiherhofgrundschule.de/unsere-schule/arbeitsgemeinschaften/ [R=301,L]
          

          Was passt daran nicht? Denn es klappt nicht 😕

          Viele Grüße, Sebastian

          1. problematische Seite

            Tach!

            RewriteEngine On
            RewriteCond %{HTTP_HOST} ^www\.weiherhof-gs\.fr\.schule-bw\.de$ [NC]
            RewriteRule ^/index.php?id=ausserunterrichtliche-angebote?$ https://weiherhofgrundschule.de/unsere-schule/arbeitsgemeinschaften/ [R=301,L]
            

            Was passt daran nicht? Denn es klappt nicht 😕

            Der Querystring wird in einer RewriteRule nicht berücksichtigt. Das Testen auf bestimmten Inhalt geht nur in einer RewriteCond.

            dedlfix.