it-swarm.com.de

Leiten Sie die WordPress - URL vorübergehend mit der Abfragezeichenfolge vom Stammverzeichnis zur neuen URL um

Dieser Beitrag scheint meine Antwort zu haben:
Wie kann ich die alte WordPress URL (mit einer Abfragezeichenfolge) mit .htaccess auf eine neue URL umleiten?

Dies scheint jedoch nicht gut mit den früheren Umschreiberegeln von WordPress zu funktionieren. Was ich tun möchte, ist eine temporäre Weiterleitung (302) von dieser Seite: https://example.com/?post_type=email#038;p=14207 zu dieser Seite: https://example.com/email/fall-2017/

Hier sind die relevanten mod_rewrite-Regeln in meiner .htaccess-Datei und deren Reihenfolge:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

# BEGIN Query String URL redirects
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/$
    RewriteCond %{QUERY_STRING} ^post_type=email#038;p=14207$
    RewriteRule .* https://example.com/email/fall-2017/? [R=302,L]
</IfModule>
# END Query String URL redirects

Ein zweites Paar Augen wird sehr geschätzt!

5
emRae

Ich denke, Sie haben zwei Probleme.

Erstens, das Umschreiben wird nacheinander geprüft und Sie setzen die Einschränkung nach der Einschränkung (d. H. Die Umleitung mit Ihrer Abfragezeichenfolge sollte an erster Stelle stehen).

Zweitens haben wir ein weiteres Problem mit der Abfragezeichenfolge. Es enthält einen Anker. Das wird nie an den Server gesendet (alles nach #... ist nur clientseitig.)

Das Umschreiben kann also diesen Hash nicht berücksichtigen, schafft es nicht zum Server und kann daher nicht überprüft werden. Es sieht jedoch so aus, als ob es wichtige Informationen enthält, und ich denke nicht, dass Sie es richtig machen können, es sei denn, Sie wissen, wie es konvertiert wird, bevor es an den Server gesendet wird. Eine Möglichkeit wäre, dass es als% 23 geschrieben ist.

Damit Sie eine gute Idee haben, müssen Sie in den Protokollen nachsehen, was Sie dort abrufen, wenn diese Seite aufgerufen wird.

Hier habe ich ein Beispiel, was Sie vielleicht sehen.

smsfromme.com:443 173.14.79.185 - - [14/Sep/2017: 01: 38: 36 +0000] GET/api/1/message/next HTTP/1.1 404 141 smsfromme.com - Dalvik/1.6.0 (Linux; U; Android 4.4.2; SM-G386T Build/KOT49H) "TLSv1 ECDHE-RSA-AES128-SHA

Die Abfragezeichenfolge wird nach dem Pfad angezeigt. Sie sollten also ein GET gefolgt von etwa Folgendem sehen:

"GET /?post_type=email#038;p=14207" ...

Oder wie ich vermute, geben Sie die Informationen, die Sie uns gegeben haben, dies:

"GET /?post_type=email" ...

Und wenn Ihre Umleitung funktioniert, lautet der Code nach dem Pfad 302.

Es ist sehr wahrscheinlich, dass Sie über ein JavaScript verfügen, das den Anker übernimmt (Daten nach dem #) und diesen in einem GET für die Daten der Seite konvertiert (dh normalerweise als AJAX -Anforderung bezeichnet). Es ist ein cooler Trick, um zu vermeiden, dass die gesamte Seite jedes Mal neu geladen wird. Aber es macht es schwieriger, mit einer .htaccess -Datei "zu optimieren".

4
Alexis Wilke

Alexis Wilke hat die Probleme wirklich herausgefunden. Zusammen mit der Tatsache, dass der #038; in der URL der HTML-Code für & ist. Es wurde gerade automatisch in die E-Mail konvertiert und ist daher auf die falsche URL gegangen.

Die Art und Weise, wie ich das gelöst habe, war die Verwendung des WordPress Plugins Quick Page/Post Redirect Plugin . Die URL-Teile, für die ich die Weiterleitung durchgeführt habe, waren: /?post_type=email to /email/fall-2017/.

Ich konnte den regulären Ausdruck oder die Formatierung nicht korrekt ausführen, damit dies in der .htaccess-Datei funktioniert, und ich denke, das Plugin weiß, wie man diese Abfragezeichenfolge genauer codiert. Bis ich mit Regex besser zurechtkomme, bleibe ich bei der Verwendung des Plugins für Redirects.

1
emRae

Die Art und Weise, wie ich das gelöst habe, war die Verwendung des WordPress Plugins Quick Page/Post Redirect Plugin. Die URL-Teile, für die ich die Weiterleitung durchgeführt habe, waren: /?post_type=email to /email/fall-2017/.

Ich konnte den regulären Ausdruck oder die Formatierung nicht korrekt ausführen, damit dies in der Datei .htaccess funktioniert

Der erforderliche Code/reguläre Ausdruck ist sehr ähnlich (aber sogar noch einfacher) als der, den Sie ursprünglich gepostet haben, muss aber nur vor dem WordPress Front-Controller (wie @AlexisWilke vorschlägt) gehen.

Zum Beispiel:

# Special redirects
RewriteCond %{QUERY_STRING} ^post_type=email$
RewriteRule ^$ /email/fall-2017/? [R=302,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Die Anweisung <IfModule> oder eine zusätzliche Anweisung RewriteEngine ist nicht erforderlich. Und die Anweisung RewriteCond, die die Servervariable REQUEST_URI prüft, ist nicht erforderlich - diese Prüfung erfolgt am besten in der Anweisung RewriteRulepattern ie. ^$ (leerer URL-Pfad).

1
MrWhite