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?


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');

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.