URL-Umschreibung über WordPress Rewrite oder .htaccess

Lesezeit: 8 Minuten

GEHEN SIE ZU EDIT8, UM ZU SEHEN, WIE ICH DAS GELÖST HABE


Nehmen wir an, ich habe einen WordPress-Blog: www.animals.com. Ich habe eine bestimmte PHP-Datei in meinem Themenverzeichnis: www.animals.com/wp-content/themes/mytheme/db.php. Außerdem habe ich eine benutzerdefinierte Vorlage für diese Seite, also erstelle ich eine neue Seite im WordPress-Administrationsbereich, um sie anzuzeigen db.php: www.animals.com/database.

Wenn ich also etwas über Löwen lesen möchte, gehe ich einfach zu: www.animals.com/database/?animal=lion (denn so habe ich mich entschieden, PHP zu schreiben, indem ich den Wert von $_GET eingefügt habe[‘animal’] in die Abfrage, per PDO etc.).

Nun möchte ich zugreifen www.animals.com/database/?animal=lion als www.animals.com/lion.

Soll ich .htaccess oder WordPress Rewrite verwenden? Wo soll ich meine .htaccess-Datei ablegen, im Stammverzeichnis des WordPress-Ordners (mit wp-config.php und diesen Dateien) oder in meinem Theme-Verzeichnis?

Der von der Wurzel hat RewriteBase / und Sachen von WordPress standardmäßig. Was soll ich schreiben, um das zu erreichen, was ich will? Soll ich es vor oder nach dem vorhandenen Code setzen?

BEARBEITEN: das ist mein public_html .htaccess und das habe ich Ja wirklich tun möchte: Ich habe eine Website: www.domain.com und wenn Sie dies eingeben http://www.domain.com/dios/?dios=agni Es zeigt Ihnen die Informationen über den Gott Agni. Ich möchte tippen www.domain.com/dioses/agni um auf die Informationen über den Gott Agni zuzugreifen. Die PHP-Datei ist drin www.domain.com/wp-content/themes/smitespain/dios.php
Es funktioniert nicht x_x

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^dioses/(\w*)$ dios/?dios=$1 [NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

EDIT2: Ich verwende Multisite (siehe EDIT4)und wieder /database/ /dios/ und /dioses/ sind nicht Tatsächliche Ordner, die ich erstellt habe, das ist der Name für die Seite, die ich in WordPress erstellt habe. Die Sache ist, jetzt zeigt es den Namen des Gottes im Tab-Titel :S, das bedeutet die Variable $_GET[‘dios’] gesetzt ist, aber die Datei (dios.php) wird nicht geladen =/

EDIT3: Ich muss speziell auf domain.com/dios/?dios=agni zugreifen, da dies die URL ist, die es der PHP-Datei (dios.php) ermöglicht, get_header() von WordPress zu laden, sodass ich nicht direkt auf die Datei zugreifen kann

EDIT4: Ich habe beschlossen, das Multisite-Ding zu entfernen

BEARBEITEN5: Dies sind die WordPress-Seiten, die ich habe:
domain.com/dioses/ zum (www.domain.com/wp-content/themes/smitespain/dioses.php)
domain.com/dios/?dios=thor zum (www.domain.com/wp-content/themes/smitespain/dios.php)

BEARBEITEN6: Ich habe etwas im WordPress-Codex gelesen … und festgestellt, dass, wenn ich gehen möchte domain.com/dioses Ich kann darauf zugreifen, indem ich zu gehe domain.com/index.php?pagename=dioses oder domain.com/?pagename=dioses

Also fügte ich dies zwischen den hinzu Rewritebase / und die nächste Regel: RewriteRule example/test ?pagename=dioses und domain.com/example/test leitet mich weiter domain.com/dioses aber es ändert auch die URL in der Adressleiste 🙁
Die Sache ist, wenn ich das versuche: RewriteRule example/test ?pagename=dios&dios=thor es schickt mich auf die Seite ‘dios’ ohne das ‘?dios=thor’

EDIT7: Ich habe angefangen, WordPress Rewrite zu verwenden, ich habe dies zu der functions.php meines Themas hinzugefügt:

function my_rewrite_rules() {  
    add_rewrite_rule(  
        'blah',
        'index.php?pagename=dios&dios=agni',  
        'top'  
    );  
}  
add_action( 'init', 'my_rewrite_rules' );

und wieder … es lädt die Seite dios, ohne das ?dios=agni

BEARBEITEN8: und endlich habe ich es geschafft, dass es funktioniert =)
Das erste, was ich wissen musste, war das Neue ?dios=XXXX wird nicht mehr zur Verfügung stehen $_GET['dios'] Stattdessen müssen Sie anrufen $wp_query->query_vars['dios'] Also habe ich dies zu der functions.php meines Themas hinzugefügt

function add_query_vars($new_var) {
$new_var[] = "dios";
return $new_var;
}
add_filter('query_vars', 'add_query_vars');

function add_rewrite_rules($rules) {
$new_rules = array('([^/]+)' => 'index.php?pagename=dios&dios=$matches[1]');
$rules = $new_rules + $rules;
return $rules;
}
add_filter('rewrite_rules_array', 'add_rewrite_rules');

Ich stelle sicher $wp_query->query_vars['dios'] ist eigentlich eingestellt
dann füge ich einfach die reguläre Regel hinzu

  • +1, um die Lösung zu teilen und detailliert zu sein.

    – Ravi K. Thapliyal

    22. Mai 2013 um 14:03 Uhr


  • Danke Alter, du hast mir tatsächlich VIEL geholfen 😀 Danke, dass du deine Zeit damit verbracht hast =) (ich würde dir +1 geben, aber ich habe immer noch 15 Wiederholungspunkte xDDD)

    – JohnRivs

    23. Mai 2013 um 4:32 Uhr

Es gibt einen anderen Weg, es zu lösen, ohne WordPress zu berühren.

Zu .htaccess hinzufügen

RewriteRule ^lion /indexw.php?pagename=db&dios=$1 [L,E=URI:/detail/]

Datei indexw.php erstellen:

<?php $_SERVER["REQUEST_URI"] = $_SERVER["REDIRECT_URI"]; include("index.php");

Wie es funktioniert? mod_rewrite setzt REDIRECT_URI wie im Argument E=URI:value angegeben. indexw.php überschreibt einfach REQUEST_URI mit dem korrekten Wert (Danke an Ravi Thapliyal für einen Einblick in dies)

URL Umschreibung uber Wordpress Rewrite oder htaccess
Ravi K Thaplyal

WordPress setzt eine globale Umleitung auf root für alles Unidentifizierte, dh nicht eine vorhandene Datei oder einen Ordner zu ihr /index.php. Auf der anderen Seite möchten Sie sie jetzt umleiten ?animal=unidentified. Solange also die Liste der Tier-Keywords nicht behoben ist, könnte jede vorgeschlagene Lösung Ihr WordPress durcheinander bringen.

Wenn Sie ungefähr 10 Tiere hätten, könnten Sie sie wie unten zu Ihrer .htaccess-Datei (an root /) hinzufügen.

RewriteEngine on
RewriteBase /

RewriteRule ^(lion|leopard|tiger|dog|cat)/?$ database/?animal=$1 [NC,L]

# WordPress rules come here

Für über 40 Tiere würde ich Ihnen vorschlagen, ein Verzeichnis (muss nicht existieren) Präfix für Ihre Tiere zu haben.

RewriteRule ^a/(.+?)/?$ database/?animal=$1 [NC,L]

Dies würde jeden umleiten /a/critter zu database/?animal=critter und Sie müssen sie nicht mehr manuell zu Ihrer .htaccess hinzufügen. Sie könnten auch beide Regeln koexistieren lassen, so dass, wenn Sie .htaccess nicht für geändert haben /panther dennoch konnte man immer noch darauf zugreifen /a/panther.

BEARBEITEN:

Okay, ich habe es mir angesehen und es ist nicht möglich, diese Anfrage abzufangen und weiterzuleiten, ohne ein PHP-Skript zu schreiben index.php. So funktioniert Mutisite: Da keine Ihrer Umschreibungen mit ihm übereinstimmt index.php; der Einstiegspunkt für den PHP-Code von WordPress. Irgendwo in der Tiefe überprüft der Code den REQUEST_URI-Header, um zu sehen, ob er mit einer Ihrer Multisites übereinstimmt (/dios) und leitet die Anfrage ggf. an die konfigurierte Seite weiter (dios.php).

Wenn wir eine .htaccess-Weiterleitung für /dioses/agni wir können zuschlagen index.php (durch entfernen der [L]), aber der REQUEST_URI-Header bleibt immer noch derselbe (/dioses/agni) und es ist keine Mulisite dafür konfiguriert. Daher schlägt die Umleitung fehl.

  • Ich habe es geschafft, dies in die .htaccess-Datei im them-Verzeichnis zu schreiben: RewriteRule ^(\w*)$ db.php?animal=$1, also kann ich jetzt auf www.animals.com/wp-content/themes/mytheme/db zugreifen .php?animal=lion als www.animals.com/wp-content/themes/mytheme/lion Kann ich dann etwas mit dieser URL machen? Zum Beispiel von dieser URL zu www.animals.com/lion? Wie soll ich das machen, wenn ich eine feste Liste verwenden möchte?

    – JohnRivs

    21. Mai 2013 um 8:45 Uhr


  • Ich spreche von Root “domain.com/lion”. Wenn “domain.com/someanimalyoudontwant” von WordPress nett umgeleitet wurde, wird es jetzt nicht passieren.

    – Ravi K. Thapliyal

    21. Mai 2013 um 8:51 Uhr

  • Ich weiß deine Hilfe zu schätzen, aber ich kann es nicht wirklich verstehen :S

    – JohnRivs

    21. Mai 2013 um 8:53 Uhr

  • Ohh, ich verstehe, und ja, ich würde gerne Folgendes in die Adressleiste eingeben: animals.com/lion, um auf animals.com/database/?animal=lion zuzugreifen. Also, wenn ich eine ‘Über’-Seite habe und ich Tiere eingebe. com/about würde es einen Konflikt oder ähnliches zwischen der eigentlichen ‘About’-Seite und ?animal=about geben, richtig? Wie könnte ich dies mit einer festen Liste tun?

    – JohnRivs

    21. Mai 2013 um 9:03 Uhr

  • Ja, das wollte ich dir verständlich machen. Wie lang ist die Liste? Es kann nach einem Punkt unpraktisch werden. Jetzt in der Kaffeepause.. 🙂 Ich werde in einiger Zeit ein Muster mit drei bis vier Tieren posten.

    – Ravi K. Thapliyal

    21. Mai 2013 um 9:07 Uhr

RewriteEngine On
RewriteCond %{QUERY_STRING}  ^$
RewriteRule ^www\.animals\.com/lion$ /www.animals.com/database/?animal=lion [R=301,NE,NC,L]

Verwenden Sie einfach diesen Code. Ich hoffe, dass es klappt.

  • Willkommen bei Stapelüberlauf! Bitte verwenden Sie keine Signaturen oder Slogans in Ihren Beiträgen. Jeder Beitrag, den Sie erstellen, ist bereits mit Ihrer Standard-Benutzerkarte „signiert“, die direkt auf Ihre Benutzerseite zurückverweist. Ihre Benutzerseite gehört Ihnen – füllen Sie sie mit interessanten Informationen über Ihre Interessen, coole Sachen, an denen Sie gearbeitet haben, oder was auch immer Ihnen gefällt! Es könnte sich lohnen, einen Blick in die Hilfe zu werfen, insbesondere in die Frage Welches Verhalten wird von Benutzern erwartet? Seite.

    – Xavi Lopez

    18. Februar 2014 um 11:20 Uhr

URL-Umschreiben würde bei mir nicht funktionieren, auch nicht per Anruf add_filter('rewrite_rules_array', function() {})noch per Anruf add_rewrite_rule(). Anscheinend lag das am Filter 'rewrite_rules_array' wurde beim Öffnen von Seiten der Frontend-Website nie ausgelöst, sodass die Umschreibungen nicht generiert wurden.

Die Lösung war, in den Admin-Bereich zu gehen und einfach die Seite Einstellungen -> Permalinks zu öffnen. Ich muss das jedes Mal tun, wenn ich meine Umschreibungen ändern möchte.

Ich weiß nicht, ob Vanilla WordPress so funktioniert, dies wird wahrscheinlich durch ein Plugin/Thema verursacht, das ich installiert habe.

963650cookie-checkURL-Umschreibung über WordPress Rewrite oder .htaccess

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy