Как отключить автоматическое перенаправление для 404 ошибок и "неправильных" URL?

8 нояб. 2012 г., 13:13:13
Просмотры: 59.1K
Голосов: 23

WordPress имеет функцию, которая автоматически перенаправляет URL-адреса, если считает, что они написаны неправильно. Вот пример: у меня есть страница с названием my-page

Если я перейду по адресу:

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

он сразу перенаправит меня на

www.mysite.com/my-page/

так как по первому URL ничего не существует.

Как можно отключить эту функцию и вместо этого просто получать ошибку 404, если введены неправильные URL?

3
Комментарии

Если вы посмотрите, что происходит (с помощью HttpFox, WireShark или аналогичного сниффера пакетов), эти страницы перенаправляются с кодом статуса 301 — Moved Permanently (Перемещено навсегда), что является корректным поведением. Это помогает поисковым системам поддерживать свои базы данных в актуальном состоянии, среди прочего, а также помогает пользователям находить страницы. Это может повлиять на то, как WordPress обрабатывает ситуации, когда вы действительно перемещаете страницу или изменяете постоянную ссылку, поэтому будьте осторожны. В любом случае, выбор за вами, но я не уверен, что это хорошая идея.

s_ha_dum s_ha_dum
8 нояб. 2012 г. 17:04:24

Я знаю, что это полезно, я понимаю это. Однако у меня есть конкретный случай использования, где мне не нужно такое поведение. Я разрабатываю плагин, который обрабатывает перенаправление URL, и поэтому хочу переопределить это поведение.

Mazatec Mazatec
9 нояб. 2012 г. 13:28:15

Вот более правильный ответ: ссылка

Binod Kalathil Binod Kalathil
19 дек. 2014 г. 12:54:16
Все ответы на вопрос 3
6
33

Это сработало для меня:

remove_action('template_redirect', 'redirect_canonical');
8 нояб. 2012 г. 13:28:58
Комментарии

Можете объяснить, что это делает? Что такое канонический редирект? Я новичок в WordPress

Yatin Mistry Yatin Mistry
25 сент. 2014 г. 10:50:37

Вы только что избавили меня от множества проблем! Спасибо! :-D

Jenski Jenski
26 февр. 2016 г. 12:34:55

Есть ли где-то возможность просматривать эти редиректы, чтобы удалять их по одному?

Shane Jones Shane Jones
22 февр. 2017 г. 15:50:22

Это отлично. Вы знаете, почему wp-admin может всё ещё перенаправлять после использования этого?

Gezim Gezim
3 февр. 2018 г. 15:56:36

Подробное объяснение этой проблемы можно найти по ссылке https://www.dev4press.com/blog/wordpress/2015/canonical-redirect-problem-and-solutions/

ronnefeldt ronnefeldt
14 янв. 2019 г. 07:33:18

Я считаю, что следует использовать remove_filter вместо remove_action.

Shawn Shawn
12 янв. 2020 г. 04:09:56
Показать остальные 1 комментариев
1
11

Как предложил Ash, вы можете отключить эту функцию с помощью следующего кода:

remove_action('template_redirect', 'redirect_canonical');

Изучив функцию redirect_canonical в файле canonical.php, становится ясно, что вы также можете изменить её поведение с помощью собственного фильтра.

В конце функции redirect_canonical() есть вызов фильтра для финального результата:

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

Таким образом, вы можете написать собственный фильтр, чтобы изменить конечный URL перенаправления или вернуть null для остановки перенаправления, основываясь на входных данных, тем самым отключив функцию для конкретного URL или группы URL.

30 мар. 2017 г. 21:44:02
Комментарии

Этот SO показывает больше деталей о том, как добавить фильтр для таких как я, кто немного новичок в WP

PBMe_HikeIt PBMe_HikeIt
30 янв. 2020 г. 23:22:51
2

Вы можете отключить угадывание постоянных ссылок для 404 ошибок, не отключая при этом перенаправление канонических URL, добавив следующую строку в ваш код (например, в functions.php):

add_filter('do_redirect_guess_404_permalink', '__return_false');

Соответствующие функции в коде WordPress — это redirect_canonical и redirect_guess_404_permalink в файле wp-includes/canonical.php.

24 сент. 2020 г. 18:10:03
Комментарии

Интересно, что документация кажется устаревшей, потому что там сказано, что redirect_canonical предназначен как для редиректов на уровне TLD, так и для редиректов 404 ошибок...

Jesse Nickles Jesse Nickles
24 сент. 2020 г. 19:23:08

@JesseNickles, Да, redirect_canonical вызывает redirect_guess_404_permalink если страница возвращает 404, но он также выполняет и другие редиректы.

Ian Mackinnon Ian Mackinnon
24 сент. 2020 г. 20:50:36