Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Umstellung SEO Operator - redirect 301

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Umstellung SEO Operator - redirect 301
    am: 27. Mai 2016, 12:07:18
    Ich hatte mal während eines Domainumzuges den SEO Operator umgestellt vom : auf -, weil ja diverse Software Probleme Macht, wenn eine Doppelpunkt in einer URL ist.
    Ich hatte mir eine Redirect Map gebaut, wo ich jeden einzelnen Link mit einer Zeile in der .htaccess in dem Format redirectet hatte:
    Code: XML  [Auswählen]
    Redirect 301 /Impressum:_:4.html https://www.j-k-fischer-verlag.de/Impressum-_-4.html
    Die letzte Zeile dann um alles übersehene einzusammeln:
    Code: XML  [Auswählen]
    Redirect 301 / https://www.j-k-fischer-verlag.de/
    Das ganze produziert aber eben Probleme bei den vergessenen Links, wie print_product_info.php
    Der Googlebot versucht z.B. so was zu crawlen:
    Code: XML  [Auswählen]
    https://www.j-k-fischer-verlag.de/Historisches/Archaeologie/print_product_info.php?products_id=2844
    :oh-no:

    Da ich keine Lust habe mir laufend die crawling Fehler anzusehen und dann darauf zu reagieren, habe ich im Netz eine intelligentere Lösung gesucht und auch gefunden:
    https://www.geoffhayward.eu/2014/04/character-replace-with-apache-module-mod-rewrite
    Also umgebaut auf : nach -
    Code: XML  [Auswählen]
      RewriteRule ^(.*):(.*)$ $1-$2 [N,E=redirect:true]
      RewriteCond %{ENV:redirect} ^true$
      RewriteRule (.*) $1 [R=301]
     
    Damit würde auf der alten Domain eine Zeile reichen:
    Code: XML  [Auswählen]
    Redirect 301 / https://www.j-k-fischer-verlag.de/

    ... und auf der neuen dieser Dreizeiler.

    Ich habe das mal direkt unter
    Code: XML  [Auswählen]
    RewriteEngine On
    platziert und es scheint zu funktionieren.

    Was mich ein wenig verwirrt ist .....
    Aus
    https://www.j-k-fischer-verlag.de/Impressum:_:4.html
    wird jetzt
    https://www.j-k-fischer-verlag.de/Impressum-_-4.html?coID=4

    Es funktioniert zwar, aber irgendwie wird der GET Parameter nochmal angehängt?!?

    Das kann man doch sicher unterbinden?

    Der Versuch das ganze als letzte Regel einzubinden brachte ein identisches Ergebnis.  :-?

    Schön wäre hier mal eine zuverlässige Lösung für solche regex_replace redirects zu haben ... ich denke da auch an solche Dinge:
    http://www.modified-shop.org/forum/index.php?topic=35083

    Linkback: https://www.modified-shop.org/forum/index.php?topic=35095.0

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Umstellung SEO Operator - redirect 301
    Antwort #1 am: 30. Mai 2016, 10:53:45
    Wenn das mal jemand braucht ....

    ALLE URLS, die : enthalten

    1) In Adresszeile die : gegen - ersetzen

    2) Einen 301 Header zurückschicken, damit die Suchmaschine das auch kapiert.

    In der .htaccess DIREKT HINTER
    Code: XML  [Auswählen]
      RewriteEngine On
     
    Das einfügen:
    Code: XML  [Auswählen]
      ##-- Redirect old : SEO URLs to new -
      RewriteRule ^(.*):(.*)$ $1-$2 [N,E=redirect:true]
      RewriteCond %{ENV:redirect} ^true$
      RewriteRule (.*) $1 [L,R=301]
     

    Fakrae

    • Viel Schreiber
    • Beiträge: 997
    Re: Umstellung SEO Operator - redirect 301
    Antwort #2 am: 30. Mai 2016, 19:22:51
    Ich fand deinen Beitrag sehr nützlich - allerdings landet das bei mir in einer Endlosschleife und letztendlich in einem Fehler 502, ich habe dazu mal einen Auszug des Logs beigelegt:

    [Mon May 30 17:38:12.728580 2016] [rewrite:trace3] [perdir /var/www/vhosts/example.org/httpdocs/] add path info postfix: /var/www/vhosts/example.org/httpdocs/Gemuese -> /var/www/vhosts/example.org/httpdocs/Gemuese/Gemueseeintopf::63.html
    [Mon May 30 17:38:12.728886 2016] [rewrite:trace3] [perdir /var/www/vhosts/example.org/httpdocs/] strip per-dir prefix: /var/www/vhosts/example.org/httpdocs/Gemuese/Gemueseeintopf::63.html -> Gemuese/Gemueseeintopf::63.html
    [Mon May 30 17:38:12.728900 2016] [rewrite:trace3] [perdir /var/www/vhosts/example.org/httpdocs/] applying pattern '^(.*):(.*)$' to uri 'Gemuese/Gemueseeintopf::63.html'
    [Mon May 30 17:38:12.728911 2016] [rewrite:trace2] [perdir /var/www/vhosts/example.org/httpdocs/] rewrite 'Gemuese/Gemueseeintopf::63.html' -> 'Gemuese/Gemueseeintopf:-63.html'
    [Mon May 30 17:38:12.728917 2016] [rewrite:trace3] [perdir /var/www/vhosts/example.org/httpdocs/] add per-dir prefix: Gemuese/Gemueseeintopf:-63.html -> /var/www/vhosts/example.org/httpdocs/Gemuese/Gemueseeintopf:-63.html
    [Mon May 30 17:38:12.728922 2016] [rewrite:trace3] [perdir /var/www/vhosts/example.org/httpdocs/] add path info postfix: /var/www/vhosts/example.org/httpdocs/Gemuese/Gemueseeintopf:-63.html -> /var/www/vhosts/example.org/httpdocs/Gemuese/Gemueseeintopf:-63.html/Gemueseeintopf::63.html
    [Mon May 30 17:38:12.728925 2016] [rewrite:trace3] [perdir /var/www/vhosts/example.org/httpdocs/] strip per-dir prefix: /var/www/vhosts/example.org/httpdocs/Gemuese/Gemueseeintopf:-63.html/Gemueseeintopf::63.html -> Gemuese/Gemueseeintopf:-63.html/Gemueseeintopf::63.html
    [Mon May 30 17:38:12.728929 2016] [rewrite:trace3] [perdir /var/www/vhosts/example.org/httpdocs/] applying pattern '^(.*):(.*)$' to uri 'Gemuese/Gemueseeintopf:-63.html/Gemueseeintopf::63.html'
    [Mon May 30 17:38:12.728934 2016] [rewrite:trace2] [perdir /var/www/vhosts/example.org/httpdocs/] rewrite 'Gemuese/Gemueseeintopf:-63.html/Gemueseeintopf::63.html' -> 'Gemuese/Gemueseeintopf:-63.html/Gemueseeintopf:-63.html'
    [Mon May 30 17:38:12.728938 2016] [rewrite:trace3] [perdir /var/www/vhosts/example.org/httpdocs/] add per-dir prefix: Gemuese/Gemueseeintopf:-63.html/Gemueseeintopf:-63.html -> /var/www/vhosts/example.org/httpdocs/Gemuese/Gemueseeintopf:-63.html/Gemueseeintopf:-63.html
    [Mon May 30 17:38:12.728941 2016] [rewrite:trace3] [perdir /var/www/vhosts/example.org/httpdocs/] add path info postfix: /var/www/vhosts/example.org/httpdocs/Gemuese/Gemueseeintopf:-63.html/Gemueseeintopf:-63.html -> /var/www/vhosts/example.org/httpdocs/Gemuese/Gemueseeintopf:-63.html/Gemueseeintopf:-63.html/Gemueseeintopf::63.html
    [Mon May 30 17:38:12.728945 2016] [rewrite:trace3] [perdir /var/www/vhosts/example.org/httpdocs/] strip per-dir prefix: /var/www/vhosts/example.org/httpdocs/Gemuese/Gemueseeintopf:-63.html/Gemueseeintopf:-63.html/Gemueseeintopf::63.html -> Gemuese/Gemueseeintopf:-63.html/Gemueseeintopf:-63.html/Gemueseeintopf::63.html

    LÖSUNG:

    Code: PHP  [Auswählen]
      RewriteRule ^(.*):(.*)$ $1-$2 [DPI,N,E=redirect:true]
      RewriteCond %{ENV:redirect} ^true$
      RewriteRule (.*) $1 [L,R=301]

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Umstellung SEO Operator - redirect 301
    Antwort #3 am: 31. Mai 2016, 09:36:39
    Ich verstehe weder warum es bei Dir nicht funktionierte, noch warum es so bei Dir geht.

    Hattest Du das vor oder nach
    Code: XML  [Auswählen]
    RewriteBase /
    eingebaut?

    Bei mir ist das so:

    Code: PHP  [Auswählen]
    <IfModule mod_rewrite.c>
      ##-- Initialize and enable rewrite engine
     ##-- Documentation http://httpd.apache.org/docs/misc/rewriteguide.html
     RewriteEngine On
     
      ##-- Redirect old : SEO URLs to new -
     RewriteRule ^(.*):(.*)$ $1-$2 [N,E=redirect:true]
      RewriteCond %{ENV:redirect} ^true$
      RewriteRule (.*) $1 [L,R=301]
     
      ##-- EXAMPLE: If your shop is located at "http://www.yourdomain.com/shop",
     ##-- set the following line like e.g.: RewriteBase /shop/
     RewriteBase /
      RewriteCond %{HTTP_HOST} !^www\. [NC]
     .....

    DPI verstehe ich nicht so richtig .... "discard path info" ... also in PHP ist $_SERVER['PATH_INFO'] nur gesetzt, wenn man so was macht:
    http://example.org/test.php/willi

    Code: PHP  [Auswählen]
    var_dump($_SERVER['PATH_INFO']);

    ist dann: string(6) "/willi"

    Fakrae

    • Viel Schreiber
    • Beiträge: 997
    Re: Umstellung SEO Operator - redirect 301
    Antwort #4 am: 31. Mai 2016, 17:34:22
    Ich habe es sowohl davor als auch nach dem RewriteBase getestet - aktuell ist es DANACH (also erst RewriteBase, dann deine Regel) - andersherum hat er mir zusätzlich noch den Dateipfad angehängt (also URL: https://www.example.org/var/www/vhosts/example.org/httpdocs/Gemuese/Gemueseeintopf--63.html ) - wird zwar trotzdem angezeigt, aber sowas will ich nicht bei Google haben :D

    Ich bin nur im Netz auf die Suche gegangen, nachdem mein Errorlog zwischenzeitlich mehrere Gigabyte groß war mit dem Logging der Regeln :-) Pro Versuch gab es erstmal ~180MB für die Schleife, bevor er es aufgegeben hat.
    https://httpd.apache.org/docs/trunk/rewrite/flags.html#flag_dpi
    sagt dazu, dass es den Server wohl manchmal verspult, wenn mehrere Regeln gleichzeitig aktiv werden würden (zumindest verstehe ich das so) - vielleicht weil das (.*): (.*) für Kategorien 2mal und für Artikel sogar 3mal anschlägt?
    Bug im Bugtracker: https://bz.apache.org/bugzilla/show_bug.cgi?id=38642

    Alfred

    • Experte
    • Beiträge: 2.115
    Re: Umstellung SEO Operator - redirect 301
    Antwort #5 am: 31. Mai 2016, 19:25:32
    Hallo,

    du musst zuerst klären welche Apache-Version der Server hat und ob es ein Apache ist.
    Dann solltest du wissen das jeder Eintrag in einer .htaccess eine Schleife ausübt.
    Wenn etwas zutrifft ist das der Zwischenstand und jede Zeile in der .htaccess wird noch einmal abgearbeitet.
    Deshalb füllen sich Rewrite-Logs extrem schnell. Deshalb sollte man das einschalten, Befehl testen und es sofort wieder ausschalten.

    Jegliche Änderungen, dieser Art, an URLs sollten weit weg von Umsatzhochs geschehen.

    Gruß

    Fakrae

    • Viel Schreiber
    • Beiträge: 997
    Re: Umstellung SEO Operator - redirect 301
    Antwort #6 am: 31. Mai 2016, 19:53:00
    Die Apache-Version ist bei mir 2.4.10 - nicht ganz aktuell, ich weiß und bin dran.
    Das ganze läuft mit einem nginx Reverse-Proxy, der die statischen Inhalte ausliefert.

    Klar, die Logs waren nur zum Testen an. Aber die 180 MB kamen von einem einzelnen Aufruf, der sich nach unten gezeigtem Schema eben ins Unendliche ausdehnte.

    Getestet an einem nicht-öffentlichen, zugriffsgeschützten Server :-)
    3 Antworten
    2369 Aufrufe
    05. Februar 2015, 08:45:52 von Matt
    0 Antworten
    1879 Aufrufe
    11. Juli 2013, 11:34:21 von apm
    17 Antworten
    9915 Aufrufe
    04. Dezember 2012, 10:42:50 von faglork
    9 Antworten
    1701 Aufrufe
    16. Dezember 2018, 03:46:17 von umbi
               
    anything