Support » Allgemeine Fragen » Rewrite-Problem

  • Hallo,

    unzählige Stunden der Suche brachten mir keinen Erfolg, so dass ich meine Frage hier stellen muss. Es ist zwar auch ein woocommerce im Einsatz, allerdings funktioniert schon das rewrite in der htaccess nicht, weshalb ich eine grundsätzlich Info benötige.
    1. Folgende Url funktioniert: http://www.domain.com/product/intel/?model_id=1234
    2. Folgend Url soll funktioniert: http://www.domain.com/intel-core-i7-9700

    Ich habe zunächst versucht, die htaccess abzuändern:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^intel-core-i7-9700/?$ product/intel/?model_id=1234 [L]
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress

    Das funktioniert nicht. Ich verstehe schon hier nicht, warum. Für Denkanregungen bin ich dankbar.

    Ich habe auch versucht, in der functions.php Filter/Actions zu setzen:

    function my_rewrite_rules($rules)
    {
        global $wp_rewrite;	  
        add_rewrite_rule('^intel-core-i7-9700/?$','product/intel/?model_id=1234','top');
    }
    add_action('page_rewrite_rules', 'my_rewrite_rules');
    
    function my_query_vars($vars)
    {
      $my_vars = array('model_id');
      return array_merge($my_vars, $vars);
    }
    add_filter('query_vars', 'my_query_vars');

    Nun glaube ich aber verstanden zu haben, dass man in der functions.php nur auf die index.php rewriten kann. Nur verstehe ich in diesem Zusammenhang die ganzen Paramter nicht und finde auch keine Seite, die mir das vernünftig erklärt.

    Wäre schön, wenn ich Tipps zum Rewrite der obigen Url erhalte. Danke.

    Gruß
    RoSieg

Ansicht von 7 Antworten - 1 bis 7 (von insgesamt 7)
  • … jetzt ruft er zwar die richtige Produktseite auf, ignoriert aber den Querystring. Tipps?

    function my_rewrite_rules($rules)
    {
        global $wp_rewrite;	  
        add_rewrite_rule('^intel-core-i7-9700/?$','index.php?product=intel&model_id=1234','top');
    }
    // add_action('page_rewrite_rules', 'my_rewrite_rules');
    add_action('init', 'my_rewrite_rules');
    
    function my_query_vars($query_vars)
    {   
    	 $query_vars[] = 'model_id';
    	 return $query_vars;
    }
    add_filter('query_vars', 'my_query_vars');

    Moderationshinweis: Code-Formatierung korrigiert. Bitte verwende künftig die Code-Formatierung im Beitrags-Editor des Forums.

    $model_id = (isset($wp_query->query_vars['model_id'])) ? 
    $wp_query->query_vars['model_id'] : false;

    $model_id bleibt einfach leer

    • Diese Antwort wurde geändert vor 7 Monaten, 2 Wochen von Bego Mario Garde. Grund: Code-Formatierung

    Probier mal:

    RewriteRule ^intel-core-i7-9700(/?)$ product/intel/?model_id=1234 [L]

    Danke, ich hab’s getestet (ich glaube auch, dass ich das in der Vergangenheit schon mal gemacht hatte … aber ich bin für jeden Tipp dankbar), aber es ändert nichts. model_id bleibt leider leer. Ich habe auch ersatzweise produkt/intel/?... (also ‚k‘ anstatt ‚c‘ in produkt) getestet. Aber auch nicht die Lösung.

    Vorab: add_rewrite_rule kannte ich bisher noch nicht. Ich habe aber eine ähnliche Konstellation, also eine URL die abgerufen wird und dahinter eine Seite, die WordPress verarbeiten soll. Das habe ich erfolgreich mit .htaccess gelöst. Aber mit dem Rewrite von WordPress geht das nun eleganter.

    function my_rewrite_rules() {
    	global $wp_rewrite;
            add_rewrite_tag( '%model_id%', '([^&]+)');
    	add_rewrite_rule('^intel-core-i7-([^/]+)/?$', 'index.php?pagename=intel&model_id=$matches[1]', 'top');
    //    Nur solange man testet, danach wieder auskommentieren
            $wp_rewrite->flush_rules();
    }
    add_action('init', 'my_rewrite_rules');

    Im Skript bekommt man dann $model_id mit get_query_var('model_id').

    Danke, aber das ist keine Lösung, es führt zu einem 301-redirect. Und genau das ist eben nicht gewünscht. Die URL soll beibehalten bleiben.

    Also ich seh bei mir kein 301-Redirect.
    In der Adresszeile des Browser steht http://www.domain.com/intel-core-i7-9700 , abgearbeitet wird aber die Seite http://www.domain.com/index.php?pagename=intel&model_id=9700 .
    Umgeleitet wird da nichts.

Ansicht von 7 Antworten - 1 bis 7 (von insgesamt 7)
  • Das Thema „Rewrite-Problem“ ist für neue Antworten geschlossen.