Jak zapobiec automatycznemu przekierowaniu?

16

Wordpress ma funkcję, dzięki której automatycznie przekieruje twoje adresy URL, jeśli zauważy, że są one źle napisane. Oto przykład: Mam stronę o nazwiemy-page

Jeśli pójdę do:

www.mysite.com/something/my-page/

natychmiast przekieruje mnie do

www.mysite.com/my-page/

ponieważ nic nie istnieje pod pierwszym adresem URL.

Jak mogę wyłączyć tę funkcję i zamiast tego uzyskać 404, jeśli wpisane zostaną nieprawidłowe adresy URL?

Mazatec
źródło
Jeśli obserwujesz, co się dzieje (przez HttpFox lub WireShark lub podobny sniffer pakietów), strony te przekierowują ze statusem 301 - Przeniesione na stałe - co jest właściwym zachowaniem. Pomaga wyszukiwarkom w utrzymywaniu aktualności baz danych między innymi, a przekierowanie pomaga użytkownikom znajdować strony. Może to wpłynąć na sposób, w jaki WordPress obsługuje rzeczy, gdy faktycznie przenosisz stronę lub zmieniasz bezpośredni link, więc bądź ostrożny. W każdym razie, twój wybór, ale nie jestem pewien, czy to dobry pomysł.
s_ha_dum
Wiem, że to dobrze, rozumiem to. Mam jednak szczególny przypadek użycia, w którym nie potrzebowałem tego zachowania. Tworzę wtyczkę, która obsługuje przekierowanie adresów URL, dlatego chcę zastąpić to zachowanie.
Mazatec
Oto poprawniejsza odpowiedź: link
Binod - GoFundMonica,

Odpowiedzi:

23

To działało dla mnie:

remove_action('template_redirect', 'redirect_canonical');
Mazatec
źródło
Czy możesz poprowadzić mnie do tego, co zrobi? co to jest przekierowanie kanoniczne? jestem nowy w wordpress
Yatin Mistry
Właśnie uratowałeś mi wiele bólów głowy! Dziękuję Ci ! :-D
Jenski
1
Czy nigdzie nie widzimy tych przekierowań, abyśmy mogli je usuwać pojedynczo?
Shane Jones
To jest świetne. Czy wiesz, dlaczego wp-adminpo skorzystaniu z tego nadal przekierowujesz?
Gezim
Szczegółowe wyjaśnienie tego problemu można znaleźć na stronie dev4press.com/blog/wordpress/2015/…
ronnefeldt
5

Zgodnie z sugestią Ash'a możesz wyłączyć tę funkcję, używając następującego kodu:

remove_action('template_redirect', 'redirect_canonical');

Patrząc na funkcję redirect_canonical w canonical.php, wydaje się, że możesz również zmodyfikować zachowanie za pomocą własnego filtra.

Na końcu funkcji redirect_canonical () znajduje się wywołanie filtrujące ostateczną odpowiedź:

$redirect_url = apply_filters( 'redirect_canonical', $redirect_url, $requested_url );

Możesz więc napisać własny filtr, aby zmodyfikować ostateczne przekierowanie lub zwrócić wartość NULL, aby zatrzymać przekierowanie, na podstawie danych wejściowych, wyłączając w ten sposób funkcję dla określonego adresu URL lub podzbioru adresów URL.

Mike P.
źródło