Was ist falsch an meiner Rewrite-Regel für eine Seiten-URL mit Abfrageparametern und functionscodes?

Ich bin neu in der WP-Programmierung und habe Probleme damit, was in anderen Umgebungen ein einfaches Problem wäre.

Ich habe eine Seite (cdl-manual) mit der normalen WP admin UI erstellt. Dann fügte ich der theme functions.php Datei einige functionen hinzu, so dass ich Shortcodes für den Seiteninhalt verwenden konnte. Die functionen suchen nach einem Abfrageparameter (jp_stn) für die URL und verwenden diese Information, um den Inhalt aus einer databasetabelle auszuwählen. In diesem Fall ist der Parameterwert der Name eines US-Bundesstaates. Der bereitgestellte Content ist eine Seite, die auf diesen Status ausgerichtet ist.

All das funktioniert jetzt auf meiner Dev-Website.

http://blog.jobspetroleum.net/cdl-training/ listet für jedes Bundesland einen Link zum CDL-Handbuch auf. Diese Links haben die folgende Form, wie oben beschrieben.

http://blog.jobspetroleum.net/cdl-manual/?jp_stn=arizona

Jetzt möchte ich diese state-spezifische Abfrageparameter-URL in eine benutzerfreundliche URL konvertieren. Das ist das neue Muster.

http://blog.jobspetroleum.net/cdl-manual/arizona/

Die offensichtliche Lösung für mich war, eine Rewrite-Regel hinzuzufügen. Nach langem Fummeln fand ich ein Plugin, mit dem ich eine benutzerdefinierte Rewrite-Regel direkt in die .htaccess-Datei einfügen konnte. Das Plugin ist “WP htaccess Control” und es funktioniert ganz gut. Meine Rewrite-Regeln funktionieren jedoch nicht so wie sie sollten. Hier ist die resultierende .htaccess-Datei nach dem Hinzufügen meiner Rewrite-Regel.

# BEGIN WordPress # WPhtc: Begin Custom htaccess RewriteRule ^cdl-manual/([-az]+)/$ /cdl-manual/?jp_stn=$1 [L] # WPhtc: End Custom htaccess  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Die neue Regel befindet sich im Abschnitt Custom htaccess. Dieser erzeugt einen 404-Fehler, wenn ich ihn mit / cdl-manual / arizona / teste. Um zu debuggen habe ich versucht, die Flags von [L] zu [R, L] zu ändern.

Das führte zu einer Weiterleitung zu http://blog.jobspetroleum.net/cdl-manual/?jp_stn=arizona . Die Seite hat den Inhalt korrekt geladen, aber die URL wurde nicht neu geschrieben. Ich schließe, dass die Regel korrekt übereinstimmt. Aber ohne das R-Flag, denke ich, funktioniert das Neuschreiben nicht richtig. Die Regel ist korrekt nach http://htaccess.madewithlove.be/ und die umgeschriebene URL ist genau das, was ich will.

Weiß jemand, was hier falsch ist? Ist mein Ansatz komplett ausgeschaltet? Was ist eine bessere Möglichkeit, das zu beheben? Vielen Dank.

Edit 01.10.2014 – Wenn es jemandem hilft, hat die Seite “CDL Manual” nur den Inhalt “[bigleaf_jobspet_cdlmanualbystate]” darin. Diese function und andere Abhängigkeiten befinden sich in der Datei functions.php in meinem untergeordneten Thema. Diese spezielle function sucht nach dem Jp_stn-Abfrageparameter in GET, liest den Statusnamen und ruft dann detaillierten Inhalt aus den Tabellen ab, die ich der database hinzugefügt habe. Es gibt dann das HTML für den benannten Zustand zurück.

Edit 10/2/2014 – In den WP-Codex eintauchen Ich habe einen Verweis auf die Seitennamensabfrage-Variable für index.php gefunden. Also habe ich ein paar Variationen ausprobiert und diese Regel gefunden, die fast funktioniert.

 RewriteRule ^cdl-manual/([-az]+)/$ ?pagename=cdl-manual&jp_stn=$1 [L] 

Diese Regel lädt die Seite cdl-manual, ignoriert jedoch den Wert des Statusparameters. Seltsamerweise, wenn ich das beabsichtigte Umschreibmuster in einen Browser eintippe, lädt es genau die gewünschte Seite für den spezifizierten Zustand.

http://blog.jobspetroleum.net/?pagename=cdl-manual&jp_stn=arizona

Solutions Collecting From Web of "Was ist falsch an meiner Rewrite-Regel für eine Seiten-URL mit Abfrageparametern und functionscodes?"

Der Grund dafür, dass Sie eine 404 erhalten, ist, dass die Rewrite-Regel die Anforderungs-URL nicht ändert, wie berichtet wurde, sin $_SERVER[REQUEST_URI] Variable von PHP, und WordPress analysiert diese Variable, wenn sie entscheidet, welcher Inhalt Anfrage ist und da es keine solche Seite / cdl gibt -manual / arizona / zeigt eine 404 an.

Was Sie brauchen, ist eine WordPress-Rewrite-Regel, um die URL so zu analysieren, wie Sie es wollen, aber ich schlage vor, dass Sie einfach gehen und 50 Unterseiten erstellen, von denen jeder einen Zustand hat. Es kann ein wenig nervig sein, aber wahrscheinlich so schnell wie das Schreiben und Debuggen von Code, um das zu tun, was Sie wollen, und viel mehr Zukunftsprof, wenn es um weitere Anpassung per Status geht.

Anstatt eine Regel zu .htaccess hinzuzufügen, können Sie eine WordPress-Umschreibung verwenden, um dies zu tun:

 function cdl_rewrite_rule(){ add_rewrite_rule( 'cdl-manual/([-az]+)/?$', 'index.php?pagename=cdl-manual&jp_stn=$matches[1]', 'top' ); } add_action( 'init', 'cdl_rewrite_rule' ); 

Angenommen, Sie haben jp_stn zur Liste der gültigen jp_stn hinzugefügt:

 function cdl_query_vars( $query_vars { $query_vars[] = 'jp_stn'; return $query_vars; } add_filter( 'query_vars', 'cdl_query_vars' ); 

Flush wird neu geschrieben, damit die Regel wirksam wird. Sie können dies tun, indem Sie die Seite mit den Permalinks-Einstellungen aufrufen.