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: Redirect 301 in htaccess nach update von osCommerce zu neuestem modified-shop

    doni

    • Frisch an Board
    • Beiträge: 84
    Hallo Leute,

    ich habe hier einen Shop mit ca. 1000 Produkten den ich von ocCommerce zu modified-shop aktualisiert hatte.
    Jetzt wollte ich in der htaccess ein redirect 301 für jedes Produkt schreiben, finde das aber ziemlich aufwendig.
    Gibt es da eine vereinfachte Schreibweise für?:
    Code: PHP  [Auswählen]
    Redirect 301 /catalog/product_info.php/products_id/1 http://www.domain.de/product_info.php?products_id=1
    Redirect 301 /catalog/product_info.php/products_id/2 http://www.domain.de/product_info.php?products_id=2
    Redirect 301 /catalog/product_info.php/products_id/3 http://www.domain.de/product_info.php?products_id=3
    Redirect 301 /catalog/product_info.php/products_id/4 http://www.domain.de/product_info.php?products_id=4
    usw....

    Das hier z.B. hat leider nicht funktioniert und es wird einfach die alte URL aufgerufen:
    Code: PHP  [Auswählen]
    RewriteRule ^/catalog/product_info.php/products_id/([^0-9]*)$ /product_info.php?products_id=$1 [R=301,L]


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

    MasterChief

    • Mitglied
    • Beiträge: 189
    Mir hat das mal geholfen:

    Variante 1 (hängt Pfad an Ziel an)
    Redirect / http://domain.com/

    Variante 2 (hängt Pfad an Ziel an):
    RewriteEngine On
    RewriteBase /
    RewriteRule (.*) http://domain.com/$1 [QSA,R=permanent,L]

    Variante 3 (hängt Pfad NICHT an Ziel an):
    RewriteEngine On
    RewriteBase /
    RewriteRule (.*) http://domain.com/ [R=permanent,L]

    Zum Testen kann man statt R=permanent auch R=temp verwenden, dann merkt sich der Browser die Weiterleitung nicht.

    web28

    • modified Team
    • Beiträge: 9.404
    Schau Dir die .htaccess vom alten OSC Shop an. Dort sollten auch Weiterleitungsregeln enthalten sein, die man benutzten kann.

    Gruss Web28

    doni

    • Frisch an Board
    • Beiträge: 84
    So, hier die Lösung (auch dank Eurer Hilfe!!!):
    Code: PHP  [Auswählen]
    # start - Umleitung von alten, nicht mehr existierenden Seiten ######################################################################################

    # aus URL entfernen: /language/de
    RewriteCond %{REQUEST_URI} ^(.*)/language/de$
    RewriteRule ^(.*)$ https://www.domain.de/%1 [R=301,L]

    # einzelne Seiten umleiten:
    Redirect 301 /catalog/index.php https://www.domain.de/
    Redirect 301 /catalog/shopping_cart.php https://www.domain.de/shopping_cart.php
    Redirect 301 /catalog/shipping.php https://www.domain.de/Zahlung-Versand:_:1.html
    Redirect 301 /catalog/advanced_search.php https://www.domain.de/advanced_search.php
    Redirect 301 /catalog/create_account.php https://www.domain.de/create_account.php
    Redirect 301 /catalog/impressum.php https://www.domain.de/Impressum:_:4.html
    Redirect 301 /catalog/conditions.php https://www.domain.de/Unsere-AGB:_:3.html
    Redirect 301 /catalog/privacy.php https://www.domain.de/Privatsphaere-und-Datenschutz:_:2.html
    Redirect 301 /catalog/contact_us.php https://www.domain.de/Kontakt:_:7.html
    Redirect 301 /catalog/login.php https://www.domain.de/login.php

    # neue Produkte:
    Redirect 301 /catalog/products_new.php https://www.domain.de/products_new.php
    RewriteRule ^(.*)catalog/products_new.php/page/([0-9]+)$ products_new.php [R=301,L]

    # Produkte:
    RewriteRule ^(.*)catalog/product_info.php/products_id/([0-9]+)$ product_info.php?products_id=$2&%{QUERY_STRING} [R=301,L]
    # Produkte in Kategorien bis zu fünf Ebenen werden umgeleitet:
    RewriteRule ^(.*)catalog/product_info.php/cPath/([0-9]+)/products_id/([0-9]+)$ product_info.php?products_id=$3&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)catalog/product_info.php/cPath/([0-9]+)_([0-9]+)/products_id/([0-9]+)$ product_info.php?products_id=$4&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)catalog/product_info.php/cPath/([0-9]+)_([0-9]+)_([0-9]+)/products_id/([0-9]+)$ product_info.php?products_id=$5&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)catalog/product_info.php/cPath/([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)/products_id/([0-9]+)$ product_info.php?products_id=$6&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)catalog/product_info.php/cPath/([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)/products_id/([0-9]+)$ product_info.php?products_id=$7&%{QUERY_STRING} [R=301,L]

    # Kategorien bis zu fünf Ebenen werden umgeleitet:
    RewriteRule ^(.*)cPath/([0-9]+)$ index.php?cPath=$2&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)cPath/([0-9]+)_([0-9]+)$ index.php?cPath=$2_$3&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)cPath/([0-9]+)_([0-9]+)_([0-9]+)$ index.php?cPath=$2_$3_$4&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)cPath/([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)$ index.php?cPath=$2_$3_$4_$5&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)cPath/([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)$ index.php?cPath=$2_$3_$4_$5_$6&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)catalog/index.php/cPath/([0-9]+)$ index.php?cPath=$2&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)catalog/index.php/cPath/([0-9]+)_([0-9]+)$ index.php?cPath=$2_$3&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)catalog/index.php/cPath/([0-9]+)_([0-9]+)_([0-9]+)$ index.php?cPath=$2_$3_$4&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)catalog/index.php/cPath/([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)$ index.php?cPath=$2_$3_$4_$5&%{QUERY_STRING} [R=301,L]
    RewriteRule ^(.*)catalog/index.php/cPath/([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)$ index.php?cPath=$2_$3_$4_$5_$6&%{QUERY_STRING} [R=301,L]

    # alte nicht mehr gebrauchte info_pages zur Startseite umleiten:
    Redirect 301 /catalog/info_pages.php/pages_id/10 https://www.domain.de/
    Redirect 301 /catalog/info_pages.php/pages_id/6 https://www.domain.de/
    Redirect 301 /catalog/info_pages.php/pages_id/11 https://www.domain.de/

    # Pfade für die Dateien ersetzen:
    RewriteRule ^(.*)catalog/uploads/File(.*)$ /$1media/products$2 [R=301,L]

    # ende  - Umleitung von alten, nicht mehr existierenden Seiten ######################################################################################

    kotzbrocken

    • Frisch an Board
    • Beiträge: 55
    Moin,
    ich muß diesmal mit einer anderen Frage nerven und hoffe, daß mir noch einmal jemand so gut weiterhelfen kann wie vor ein paar Tagen (danke an Hanspeter).
    Der Umzug bzw. die Migration von osCommerce zu Modified 2.0.6.0 hat super geklappt. Leider hat osCommerce meine URLs folgendermaßen verschandelt:
    /product_info.php/products_id/768 (also alle Get-Parameter als Slash).
    Richtig wäre ja:
    /product_info.php?products_id=768
    So (verschandelt) sind jetzt die Links natürlich auch bei Goggle indexiert. Viel wichtiger ist aber, ich habe die Seiten auch im Shop intern so verlinkt (z. B. "das Album haben wir statt CD auch als Vinyl-Version - zu finden unter /product_info.php/products_id/768").

    Was kann ich in der .htaccess eintragen, um die Artikel mit beiden URL-Varianten /product_info.php/products_id/768/ und product_info.php?products_id=768 öffnen zu können. Geht das überhaupt mit per .htaccess? Oder gibt es im Ordner Dateien wo man da was machen kann?
    Ich habe schon allerlei Rewrite Befehle (hier nach Forum-Suche und Google-Suche) ausprobiert, aber es will einfach nicht klappen. Er springt nach Eingabe der schlechten URL /product_info.php/products_id/768 von der Produktseite immer wieder auf die index.php zurück.
    Wie gesagt, falls es noch andere Tipps statt .htaccess-Änderungen gibt, immer her damit. Bei Nachfragen oder falls meine fehlgeschlagenen Codes gebraucht werden, gerne melden!

    Danke im Voraus und beste Grüße
    Michou

    P.S.: Komischerweise funktioniert es z. B. bei der /products_new.php einfach so: Ich kann in der Adresszeile /products_new.php?page=2 eingeben oder /products_new.php/page=2
    Das funktioniert da dann wahrscheinlich, da es bei dieser URL keine ID gibt?

    Timm

    • Fördermitglied
    • Beiträge: 6.258
    Auf Dauer wären die Suchmaschinenfreundlichen URLs besser. Wird aber für eine Zeit richtig was an Ranking kosten. Wäre aber vielleicht eine Überlegung wert. Musst du aber dennoch schauen, dass er bei Eingabe der alten Links auch die suchmaschinenfreundlichen URLs findet.

    Gruß Timm

    karsta.de

    • Experte
    • Beiträge: 3.156
    @kotzbrocken

    So sollte die Umleitung funktionieren:

    Code: XML  [Auswählen]
    # https://www.deine-domain.de/product_info.php/products_id/768/   =>  
    # https://www.deine-domain.de/product_info.php?products_id=768
    RewriteRule ^product_info\.php/products_id/768/$ /product_info.php?products_id=768 [L,R=301]

    BG Karsta

    Timm

    • Fördermitglied
    • Beiträge: 6.258
    Moin

    Er benötigt es doch aber für jede mögliche products_id.

    Gruß Timm

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Hallo Michou,

    erstelle die Datei /includes/extra/application_top/application_top_begin/osc_seo_urls.php mit folgendem Inhalt.

    Code: PHP  [Auswählen]
    <?php

    // osCommerce: set the HTTP GET parameters manually if search_engine_friendly_urls is enabled
      if (SEARCH_ENGINE_FRIENDLY_URLS == 'true') {
        if (strlen(getenv('PATH_INFO')) > 1) {
          $GET_array = array();
          $PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
          $vars = explode('/', substr(getenv('PATH_INFO'), 1));
          do_magic_quotes_gpc($vars);
          for ($i=0, $n=sizeof($vars); $i<$n; $i++) {
            if (strpos($vars[$i], '[]')) {
              $GET_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
            } else {
              $_GET[$vars[$i]] = $vars[$i+1];
            }
            $i++;
          }

          if (sizeof($GET_array) > 0) {
            foreach($GET_array as $key => $value) {
              $_GET[$key] = $value;
            }
          }
          $_GET = $InputFilter->process($_GET);
          $_GET = $InputFilter->safeSQL($_GET);
        }
      }
     
      function do_magic_quotes_gpc(&$ar) {
          if (!is_array($ar)) {
              return false;
          }
          foreach($ar as $key => $value) {
              if (is_array($ar[$key])) {
                  do_magic_quotes_gpc($ar[$key]);
              } else {
                  $ar[$key] = addslashes($value);
              }
          }
          reset($ar);
      }  

    Hinweis: Suchmaschinenfreundliche URLs müssen eingeschaltet [Ja] sein.

    Für URLs dieser Form "/product_info.php/products_id/768" sollte es funktionieren, aber wenn in osCommerce Parameter vorkommen, die modified unbekannt sind, funktioniert der Code natürlich nicht. Falls in osCommerce Parameter vorkommen, die modified unbekannt sind, kann man ev. diese in bekannte Parameter umschreiben.

    Gruss
    Hanspeter

    kotzbrocken

    • Frisch an Board
    • Beiträge: 55
    Moin,
    zuerst einmal danke an alle, die sich mit meinem Problem beschäftigt und so schnell geantwortet haben.
    Der Code von Hanspeter war mal wieder goldwert, hat auf Anhieb geklappt!
    Da ich allerdings die ellenlange URL der Suchmaschinenfreundlichen URLs nicht wirklich mag, hab ich in der inc/xtc_href_link.inc.php (im Bereich "if ($admin === false && SEARCH_ENGINE_FRIENDLY_URLS == 'true'...) noch folgendes eingetragen:
    Code: XML  [Auswählen]
          $link = str_replace('?', '/', $link);
          $link = str_replace('&', '/', $link);
          $link = str_replace('=', '/', $link);
        } else {
    Jetzt werden praktisch auch wieder die alten URLs in der Adresszeile angezeigt: /product_info.php/products_id/768/
    Klar kann man sich im Grundsatz drüber streiten, ob das rankingmäßig schlau ist. ;-)
    Mein Problem ist auf jeden Fall gelöst. Besonderen Dank an Hanspeter! :thumbs:

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    [...]
    Da ich allerdings die ellenlange URL der Suchmaschinenfreundlichen URLs nicht wirklich mag, ...
    [...]

    Wenn du diesen Vorschlag hier -> https://www.modified-shop.org/forum/index.php?topic=36430.msg332138#msg332138 in deinen Shop einbaust, dann wird aus einer solchen URL,

    Code: XML  [Auswählen]
    https://hpzeller.com/modified2070/Testkategorie-2/Testkategorie-2-2/Testkategorie-2-2-2/Testprodukt3::3.html

    eine URL dieser Art.

    Code: XML  [Auswählen]
    https://hpzeller.com/modified2070/Testprodukt3::3.html

    Einen Nachteil hat die Sache allerdings, der Kategorienbaum stimmt bei verlinkten Produkten ev. nicht mehr, siehe Bilder.

    [ Für Gäste sind keine Dateianhänge sichtbar ]
    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Gruss
    Hanspeter

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Nachtrag:

    [...]
    Einen Nachteil hat die Sache allerdings, der Kategorienbaum stimmt bei verlinkten Produkten ev. nicht mehr, siehe Bilder.
    [...]

    Die Ursache für das zitierte Problem habe ich in der Datei /inc/product_redirect.inc.php ca. Zeile 101 bei folgendem Code gefunden.

    Code: PHP  [Auswählen]
        //check for products links without cat names
        if (defined('ADD_CAT_NAMES_TO_PRODUCT_LINK') && ADD_CAT_NAMES_TO_PRODUCT_LINK === false) {

    Die Konstante ADD_CAT_NAMES_TO_PRODUCT_LINK wird hier auf Identität "Boolean" geprüft, die Konstante wird aber als String definiert.

    Lösung:

    Der folgende Code von GTB aus dem verlinkten Beitrag.

    Code: PHP  [Auswählen]
    <?php
    define('ADD_CAT_NAMES_TO_PRODUCT_LINK', 'false');

    muss mit diesem Code ersetzt werden.

    Code: PHP  [Auswählen]
    <?php
    define('ADD_CAT_NAMES_TO_PRODUCT_LINK', false);

    Danach wird der Kategorienbaum richtig dargestellt und auch der Artikelnavigator funktioniert, falls aktiviert, korrekt.

    PS: Kleine Ursache, aber zwei Stunden Fehlersuche.

    Gruss
    Hanspeter

    kotzbrocken

    • Frisch an Board
    • Beiträge: 55
    Moin Hanspeter,
    sorry dass erst jetzt eine Rückmeldung kommt. Mein Shop ist nun online und das Problem mit den URLs zu meiner Zufriedenheit gelöst. Ich habe das jetzt mit den ellenlangen "Suchmaschinenfreundlichen URLs" nach deinen Tipps so umgesetzt und den Kategoriepfad aus den URLs entfernt (Beitrag von GTB: seo_url_mod() und Erweiterungen | Kategorienamen in der Produkt-URL - Antwort #1).

    Habe da aber noch 3 Anmerkungen zu:
    1. Mein folgender Code...
    Da ich allerdings die ellenlange URL der Suchmaschinenfreundlichen URLs nicht wirklich mag, hab ich in der inc/xtc_href_link.inc.php (im Bereich "if ($admin === false && SEARCH_ENGINE_FRIENDLY_URLS == 'true'...) noch folgendes eingetragen:
    Code: XML  [Auswählen]
          $link = str_replace('?', '/', $link);
          $link = str_replace('&', '/', $link);
          $link = str_replace('=', '/', $link);
        } else {
    Jetzt werden praktisch auch wieder die alten URLs in der Adresszeile angezeigt: /product_info.php/products_id/768/
    ...hat leider nicht funktioniert. Da gibt es einen Konflikt mit dem Cookie-Consent, der funktioniert dann nämlich nicht mehr.

    2.
    Einen Nachteil hat die Sache allerdings, der Kategorienbaum stimmt bei verlinkten Produkten ev. nicht mehr, siehe Bilder.
    Mit dem Kategorienbaum hatte ich keine Probleme. Ich benutze allerdings auch das Bootstrap4-Template von Karl und habe den  Kategorienbaum ziemlich einfach gehalten.

    3.
    Lösung:

    Der folgende Code von GTB aus dem verlinkten Beitrag.

    Code: PHP  [Auswählen]
    <?php
    define('ADD_CAT_NAMES_TO_PRODUCT_LINK', 'false');

    muss mit diesem Code ersetzt werden.

    Code: PHP  [Auswählen]
    <?php
    define('ADD_CAT_NAMES_TO_PRODUCT_LINK', false);

    Danach wird der Kategorienbaum richtig dargestellt und auch der Artikelnavigator funktioniert, falls aktiviert, korrekt.
    Bei dieser Lösung hatte ich das Problem, dass nach weglassen der Apostrophe beim "false" die Produktlinks der "Neue Artikel"- und "Angebote"-Boxen statt zur product_info.php zur index.php bzw. Startseite zurück führten. Komischerweise kam dieser Fehler nur wenn man schon auf der product_info-Seite war. Von der Startseite funktionierten die Boxlinks.

    Ich danke dir auf jeden Fall für deine Mühe und die ganzen guten Tipps zur Migration vom OsC zu Modified. :thx:

    Beste Grüße
    Michou

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.988
    • Geschlecht:
    @kotzbrocken
    Am Rande sei bemerkt:
    Das modified-Team hat sich bemüht die Update-Sicherheit zu erhalten, indem viele Hooks in den Code eingebaut wurden.
    Es ist sehr kurzsichtig gedacht für den schnellen Erfolg Code in Core-Dateien zu ändern (deine Änderung in /inc/xtc_href_link.inc.php). Wenn du eigene SEO-URLs möchtest baue dir doch besser eine von Datei gemäß seo_url_shopstat.php  in /includes/extra/seo_url_mod/ mit den gewünschten Änderungen und wähle dann diese in Erw. Konfiguration =>  Meta-Tags/Suchmaschinen  bei "URL Modul" aus.

    Gruß,
    noRiddle
    6 Antworten
    4260 Aufrufe
    11. Februar 2014, 14:17:15 von Luzy
    4 Antworten
    2042 Aufrufe
    25. Mai 2016, 15:17:49 von Stressless
    1 Antworten
    1744 Aufrufe
    14. Dezember 2015, 11:24:33 von Jürgen
               
    anything