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: 301 Endlos-Schleife mit MODsid , egal ob 2.0 oder älter

    Peter33

    • Fördermitglied
    • Beiträge: 73
    Hallo,

    in der Google Search Console bekam ich neulich die Warnung: Der Googlebot hat eine erhebliche Zunahme der Anzahl der URLs von http://www.beispielseite.dd festgestellt, die viele Weiterleitungen aufweisen." Ein Blick bei den Crawling-Fehler zeigt auch die Quelle. Es sind URLs mit MODsid Endungen. Wenn ich diese URLs
    mal testweise beim Redirect-Checker http://www.redirect-checker.org/index.php eingebe (als Set User-Agent den Googlebot wählen) wird eine Endlos-Schleife von 301 Umleitungen tatsächlich angezeigt. Nun dachte ich, das liegt an meinen Settings, aber ich habe das selbe Phänomen auch beim Modified Demo Shop 2.0 und bei vielen Shops, die hier unter Rubrik Shopvorstellungen präsentiert wurden, festgestellt. Hier mal exemplarisch ein paar Beispiele zur Veranschaulichung:

    bei dem Shop http://permoda.de (aus dem Thread http://www.modified-shop.org/forum/index.php?topic=35067.0) , man nimmt z.B. die URL dieser Kategorie: http://permoda.de/Sportmode:::11.html und hängt an der URL folgendes an "?MODsid=12345" oder kleingeschrieben "?modsid=12345" oder statt des Fragezeichen ein UND Zeichen, also "&modsid=12345" und trägt diese URL in dem Redirect Checker ein und wählt dort den Googlebot. Dann bekommt man folgende Fehlermeldung bei z.B. dieser URL mit modsid :  http://permoda.de/Sportmode:::11.html?modsid=12345

    Zitat
    Result

    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    http://permoda.de/Sportmode:::11.html?modsid=12345
    301 Moved Permanently
    Problems found:

        Too many redirects. Please try to reduce your number of redirects for http://permoda.de/Sportmode:::11.html?modsid=12345. Actually you use 19 Redirects. Ideally you should not use more than 3 Redirects in a redirect chain. More than 3 redirections will produce unnecessary load on your server and reduces speed, which ends up in bad user experience.


    das gleiche Problem gibt bei vielen anderen Shops aus der Forumkategorie Shopvorstellungen. Z.B diese hier:
    http://www.spreewaldshop24.de/Meerrettich:::4.html?modsid=12345
    http://www.elora24.com/Schraubenschluessel:::2174.html?modsid=12345
    http://www.girmann.com/shop/index.php?cPath=13?modsid=12345
    usw.

    bei dem Demoshop ist das nicht ganz so schlimm, denn dort kommt es zu dem Loop bzw. die Endlosschleife nur, wenn der Query-String statt mit einem Fragezeichen, mit was anderem beginnt, also z.B. mit einem UND , wie z.b. hier: https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343

    Dann lautet die Fehlermeldung:

    Zitat
    Result

    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343
    301 Moved Permanently
    Problems found:

        Too many redirects. Please try to reduce your number of redirects for https://demo.modified-shop.org/tags/modified-2.00/Testkategorie-1:::1.html&MODsid=12343. Actually you use 19 Redirects. Ideally you should not use more than 3 Redirects in a redirect chain. More than 3 redirections will produce unnecessary load on your server and reduces speed, which ends up in bad user experience.

    Wenn man beim Demoshop die MODsid klein schreibt, ist es aber wieder ok. Es scheint bei jedem  Shop mehr oder weniger Probleme mit falschen URL Parametern, der Schreibweise von  Modsids usw. zu geben.

    Hätte jemand eine Idee, wie man das Problem beseitigen könnte? Ich habe schon mit der htaccess und den Shop-Redirects experimentiert, aber ohne Erfolg.

    Grüße

    Peter

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

    Alfred

    • Experte
    • Beiträge: 2.115
    Re: 301 Endlos-Schleife mit MODsid , egal ob 2.0 oder älter
    Antwort #1 am: 26. Juni 2016, 21:40:34
    Hallo,

    vor dem modsid steht ein ? und kein &.

    Gruss

    Peter33

    • Fördermitglied
    • Beiträge: 73
    Re: 301 Endlos-Schleife mit MODsid , egal ob 2.0 oder älter
    Antwort #2 am: 26. Juni 2016, 22:19:41
    ja und im ersten Beispiel geht es auch um das "?". Auch mit "?" gibt es diese Endlosschleife.

    Alfred

    • Experte
    • Beiträge: 2.115
    Re: 301 Endlos-Schleife mit MODsid , egal ob 2.0 oder älter
    Antwort #3 am: 27. Juni 2016, 07:59:12
    Da sind keine Endlosschleifen.
    Die existieren nur bei Dir.

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: 301 Endlos-Schleife mit MODsid , egal ob 2.0 oder älter
    Antwort #4 am: 27. Juni 2016, 12:08:12
    Also ich kann die von Peter beschriebene Endlosschleife unter den von ihm beschriebenen Bedingungen mit dem Tool (Redirect-Checker: http://www.redirect-checker.org/index.php) welches er angegeben hat im Modified Shop 2.0 nachvollziehen (siehe Bild im Anhang).

    Die Ursache liegt in folgendem Codeschnipsel, hier sollte die Session aus der URL (falls vorhanden) entfernt und dann ein Redirect eingeleitet werden. Wenn aber die URL nicht korrekt ist wird zwar der Redirect eingeleitet die Session aber nicht aus dieser entfernt und somit bleibt die URL unverändert, das hat zur Folge das nach dem Redirect das Skript wieder an dieser Stelle vorbei kommt und wieder ein Redirect ohne Änderung der URL ausgelöst wird usw. Das beschriebene Verhalten gilt nur wenn im Admin unter 'Meta-Tags/Suchmaschinen' 'Spider Sessions vermeiden?' auf 'JA' gesetzt ist.

    In 'includes/modules/set_session_and_cookie_parameters.php'
    Code: PHP  [Auswählen]
      // Redirect search engines with session id to the same url without session id to prevent indexing session id urls
      if (strpos($_SERVER['REQUEST_URI'], xtc_session_name()) !== false || preg_match('/XTCsid/i', $_SERVER['REQUEST_URI'])) {
        $uri = preg_replace("/([^\?]*)(\?.*)/", "$1", $_SERVER['REQUEST_URI']);
        $params = str_replace($uri,'',$_SERVER['REQUEST_URI']);
        $params = ltrim($params,'?');
        parse_str($params,$params);
        $key = xtc_session_name();
        if (isset($params[$key])) unset($params[$key]);
        $key = 'XTCsid';
        if (isset($params[$key])) unset($params[$key]);
        $params = http_build_query($params);
        $location = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $uri . (xtc_not_null($params) ? '?' . $params : '');
        header("HTTP/1.0 301 Moved Permanently");
        header("Location: $location");
        exit();
      }
     

    Gruss
    Hanspeter

    Alfred

    • Experte
    • Beiträge: 2.115
    Re: 301 Endlos-Schleife mit MODsid , egal ob 2.0 oder älter
    Antwort #5 am: 27. Juni 2016, 13:03:08
    ? statt &

    web28

    • modified Team
    • Beiträge: 9.404
    Re: 301 Endlos-Schleife mit MODsid , egal ob 2.0 oder älter
    Antwort #6 am: 27. Juni 2016, 19:21:04
    Mit dem inkorrektem & Trenner gibt es die 301 Endlosschleife bei Auswahl von Googlebot

    Mit korrektem ? Trenner gibt es den gewollten einmaligen 301

    Verbesserungsvorschläge?

    Gruss Web28

    web0null

    • Experte
    • Beiträge: 1.998
    Re: 301 Endlos-Schleife mit MODsid , egal ob 2.0 oder älter
    Antwort #7 am: 28. Juni 2016, 03:04:14
    Suchen: (includes/modules/set_session_and_cookie_parameters.php)

    Code: PHP  [Auswählen]
    if (strpos($_SERVER['REQUEST_URI'], xtc_session_name()) !== false || preg_match('/XTCsid/i', $_SERVER['REQUEST_URI'])) {
        $uri = preg_replace("/([^\?]*)(\?.*)/", "$1", $_SERVER['REQUEST_URI']);
        $params = str_replace($uri,'',$_SERVER['REQUEST_URI']);
        $params = ltrim($params,'?');
        parse_str($params,$params);
        $key = xtc_session_name();
        if (isset($params[$key])) unset($params[$key]);
        $key = 'XTCsid';
        if (isset($params[$key])) unset($params[$key]);
        $params = http_build_query($params);
        $location = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $uri . (xtc_not_null($params) ? '?' . $params : '');
        header("HTTP/1.0 301 Moved Permanently");
        header("Location: $location");
        exit();
      }
     

    Ersetzen:
    Code: PHP  [Auswählen]
    if (stripos($_SERVER['REQUEST_URI'], xtc_session_name()) !== false || stripos($_SERVER['REQUEST_URI'], 'XTCsid') !== false) {
      $_SERVER['REQUEST_URI'] = str_replace(array('xtcsid', 'modsid'), array('XTCsid', 'MODsid'), $_SERVER['REQUEST_URI']);
      if (strpos($_SERVER['REQUEST_URI'], '?') === false) {
        $_SERVER['REQUEST_URI'] = str_replace(array('&XTCsid', '&MODsid'), array('?XTCsid', '?MODsid'), $_SERVER['REQUEST_URI']);
      }
      $uri = preg_replace("/([^\?]*)(\?.*)/", "$1", $_SERVER['REQUEST_URI']);
      $params = str_replace($uri,'',$_SERVER['REQUEST_URI']);
      $params = ltrim($params,'?');
      parse_str($params,$params);
      $key = xtc_session_name();
      if (isset($params[$key])) unset($params[$key]);
      $key = 'XTCsid';
      if (isset($params[$key])) unset($params[$key]);
      $params = http_build_query($params);
      $location = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $uri . (xtc_not_null($params) ? '?' . $params : '');
      header("HTTP/1.0 301 Moved Permanently");
      header("Location: $location");
      exit();
    }
     

    Es gibt 2 "Probleme".
    1. Groß-Kleinschreibung des Parameters.
    2. Wenn NUR ein einziger Parameter mit dem &-Zeichen dranhängt (was falsch ist).

    Beide Probleme sind im Prinzip keine Fehler, sie wären einfach falsch produzierter Code.
    Sie sollten vom System so eigentlich nicht produziert werden!

    Wie auch immer, mein Code-Beispiel berichtigt diese "Fehler".

    Gruß

    Peter33

    • Fördermitglied
    • Beiträge: 73
    Re: 301 Endlos-Schleife mit MODsid , egal ob 2.0 oder älter
    Antwort #8 am: 28. Juni 2016, 12:42:37
    danke @web0null, das funktioniert jetzt  einwandfrei. Für den 1.06er Shop muss man den Code in der
    includes/application_top.php einfügen, denn die Datei includes/modules/set_session_and_cookie_parameters.php existiert  im 1,06er nicht.

     Eine Kleinigkeit noch:
    Für den Fall dass die Schreibweise "MODsid" irgendwie verändert wurde (z.B. "Modsid", "MOdsid" oder modSID" usw.) sollte man nicht lieber die Funktion str_ireplace statt str_replace nehmen? Damit sind zumindest bei mir auch diese Fälle abgedeckt.

    Grüße
    Peter

    web28

    • modified Team
    • Beiträge: 9.404
    Re: 301 Endlos-Schleife mit MODsid , egal ob 2.0 oder älter
    Antwort #9 am: 28. Juni 2016, 13:34:51
    Danke für Deine Ideen.

    Zum Problem:
    Es soll ein Redirekt ausgeführt werden wenn die URL die Session ID als Parameter enthält.
    Damit soll verhindert werden das Links mit der gültigen SID in den Suchmaschinen landen.

    Groß/Kleinschreibung Prüfung ist evtl. sinnvoll und einfach zu lösen.

    Beim evtl. fehlenden ? Trenner muss das erste & durch ein ? ersetzt werden.
    Mögliche Fehlerquelle: SEO URL Module die das & nicht in der URL bereinigen

    Code: PHP  [Auswählen]
    if (stripos($_SERVER['REQUEST_URI'], xtc_session_name()) !== false || preg_match('/XTCsid/i', $_SERVER['REQUEST_URI'])) {
      $uri = $_SERVER['REQUEST_URI'];
      if (strpos($uri,'?') === false && strpos($uri,'&') !== false) {
          $uri = substr_replace($uri, '?', strpos($uri, '&'), 1);
      }
      $uri = parse_url($uri);
      $params = '';
      if (isset($uri['query'])) {
        $sid_keys = array('modsid','xtcsid');
        $uri['query'] = str_ireplace($sid_keys, $sid_keys, $uri['query']);
        parse_str($uri['query'],$params);
        foreach($sid_keys as $key) {
          if (isset($params[$key])) unset($params[$key]);
        }
        $params = http_build_query($params);
      }
      $location = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $uri['path'] . (xtc_not_null($params) ? '?' . $params : '');
      header("HTTP/1.0 301 Moved Permanently");
      header("Location: $location");
      exit();
      }

     

    umbi

    • Mitglied
    • Beiträge: 163
    • Geschlecht:
    Re: 301 Endlos-Schleife mit MODsid , egal ob 2.0 oder älter
    Antwort #10 am: 30. August 2016, 02:45:50
    hi Web28

    bei der Vorab-Version 2.0.0.1, kommt ein endlos redirect, wenn eine Kategorie gelöscht wurde.

    so sieht meine aktuelle set session aus:
    Code: PHP  [Auswählen]
    // start the session
    $session_started = false;
    $truncate_session_id = false;
    if (SESSION_FORCE_COOKIE_USE == 'True') {
      xtc_setcookie('cookie_test', 'please_accept_for_session', time()+60*60*24*30, DIR_WS_CATALOG, (xtc_not_null($current_domain) ? $current_domain : ''));
      if (isset($_COOKIE['cookie_test'])) {
        $session_started = xtc_session_start();
      }
    } elseif (CHECK_CLIENT_AGENT == 'true' && xtc_check_agent() == 1) {
      $truncate_session_id = true;
      $session_started = false;
      // Redirect search engines with session id to the same url without session id to prevent indexing session id urls
      if (strpos($_SERVER['REQUEST_URI'], xtc_session_name()) !== false || preg_match('/XTCsid/i', $_SERVER['REQUEST_URI'])) {
        redirect_invalid_session();
      }
    } else {
      $session_started = xtc_session_start();
    }

    hast Du einen Tip für mich wie ich dies debugen, resp deine oben erw. Anleitung hier anwenden kann?

    gruss
    umbi

    umbi

    • Mitglied
    • Beiträge: 163
    • Geschlecht:
    Re: 301 Endlos-Schleife mit MODsid , egal ob 2.0 oder älter
    Antwort #11 am: 02. September 2016, 01:39:24
    Hallo Web28

    Habs gefixt, war n exit() zuviel im "vorab" code... 
    Läuft alles prächtig jetzt.
    25 Antworten
    15707 Aufrufe
    10. April 2012, 01:27:32 von zorstn
    1 Antworten
    1848 Aufrufe
    09. Mai 2015, 14:00:39 von hendrik
    0 Antworten
    2357 Aufrufe
    20. Dezember 2009, 21:19:47 von bencore
    3 Antworten
    1583 Aufrufe
    07. Dezember 2020, 21:08:22 von DerNachbar
               
    anything