Zur Navigation

Wordpress Suche umbenennen

1 Jan

Hallo Jörg,

die Suche in Wordpress wurde im Theme abgeschaltet und da waren bisher auch keine Ereignisse im Log auffindbar. Bis heute ...

139.5.108.0 - - [24/Feb/2023:02:57:04 +0100] "GET /?s=%42%75%79%20%57%4F%57%20%47%6F%6C%64%2C%20%57%4F%57%20%43%6C%61%73%73%69%63%20%47%6F%6C%64%2C%42%75%79%20%57%4F%57%20%43%6C%61%73%73%69%63%20%47%6F%6C%64 HTTP/1.1" 200 80028

Ich kann die Suche über ein Plugin oder auch in der funktions.php des Themes gänzlich abschalten, aber kann ich das nicht auch einfach über die .htaccess erledigen?

Die Suchanfrage soll einfach auf eine Seite xyz umgeleitet werden, ohne die Suchbegriffe.

Irgendwie scheitere ich da gerade an der Umsetzung. :-(

Mit freundlichen Grüßen - Jan

24.02.2023 14:39

2 Jörg Kruse

Hierzu muss in einer RewriteCond Direktive der Query String ausgewertet werden:

RewriteCond %{QUERY_STRING} ^s=
RewriteRule ^ /xyz? [R=301,L]

Mit einem ? am Ende des Weiterleitungsziels wird der alte Query String abgehängt.

Wenn nur Bots die Suchseiten abfragen, würde ich aber nicht weiterleiten, sondern einfach einen Status-Code "Gone" ausgeben:

RewriteCond %{QUERY_STRING} ^s=
RewriteRule ^ - [G]

... das erspart dem Webserver eine zusätzliche Anfrage

24.02.2023 15:35 | geändert: 24.02.2023 15:36

1 Forenmitglied fand diesen Beitrag gut

... 1 Monat später ...

3 Jan

Hallo Jörg,

die Suche habe ich zusätzlich in der functions.php so abgestellt.

Kommt dann, wie heute gesehen, eine Anfrage nach

/page/20/?s

wird die 404 Seite des Themes angezeigt, die Anfrage aber mit einem Code 200 beantwortet.

"GET /page/20/?s HTTP/1.1" 200 13661 "-"

Da hätte ich aber gerne den 404er ;-)

RewriteCond %{REQUEST_URI} ^page/ [OR]
RewriteCond %{QUERY_STRING} ^s=
RewriteRule .* - [R=404,L]

wirkt aber nicht, auch nicht wenn ich den Eintrag in der funktions.php entfernt habe. Wo liegt da mein Fehler?

Mit freundlichen Grüßen - Jan

26.03.2023 11:27

4 Jörg Kruse

Statt des 404 "Not found" würde ich einen Status Code 410 "Gone" ausgeben, dafür hat mod_rewrite auch ein eigenes Flag "G". Das ist auch das, was Google empfiehlt: ein 410 ist im Gegensatz zum 404 von dauerhafter Natur. Den entsprechenden Code habe ich ja bereits in meinem ersten Beitrag gepostet. Dieser sollte oberhalb des WordPress-Codes eingefügt werden, damit er zum Zuge kommt.

Alternativ kannst du noch versuchen mit http_response_code() den Status Code zu setzen. Musst du ausprobieren, ob das funktioniert, oder zu spät kommt und einen "Header already sent" Error wirft:

function fb_filter_query( $query, $error = true ) {
	if ( is_search() & !is_admin()) {
		$query->is_search = false;
		$query->query_vars['s'] = false;
		$query->query['s'] = false;
		// to error
		if ( $error == true ) {
			$query->is_404 = true;
			http_response_code(404);
		}
	}
}

PS: "R=404" ist als Workaround zwar möglich. Das mod_rewrite Weiterleitungs-Flag "R" würde ich grundsätzlich aber nur mit Weiterleitungen wie 301 oder 302 verwenden. In anderen Fällen sind Nebenwirkungen nicht auszuschließen, die sich nur schwer analysieren lassen.

27.03.2023 11:51 | geändert: 27.03.2023 12:00

5 Jan

Hallo Jörg,

Alternativ kannst du noch versuchen mit http_response_code() den Status Code zu setzen. Musst du ausprobieren, ob das funktioniert, oder zu spät kommt und einen "Header already sent" Error wirft:

Genau das funktionierte Jörg! Danke! In der .htaccess hatte ich vorher die Regeln wieder entfernt.

Und deinen Hinweis zum mod_rewrite Weiterleitungs-Flag "R" werde ich versuchen im Kopf zu behalten ;-)

Mit freundlichen Grüßen - Jan

28.03.2023 11:05

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]