WordPress имеет функцию, благодаря которой он автоматически перенаправляет ваши URL, т.е. делает редирект, если считает, что адрес написан неправильно. Он подбирает самостоятельно "подходящий" url и редиректит на него.
Возьмем пример. У нас есть страница под названием my-page
. Если мы обращаемся к ней по вот такому адресу:
www.mysite.com/something/my-page/
WordPress сразу же перенаправит на:
www.mysite.com/my-page/
Это происходит, т.к. по первому адресу страницы не существует и WordPress автоматом перенаправляет на второй url. Это не очень удобно, точнее - не очень контролируемый процесс даже с точки зрения SEO.
Как можно отключить эту функцию и вместо редиректа получать страницу с 404 ошибкой?
На самом деле ответ очень простой. Мы добавляем в файл functions.php
вот такую строчку кода:
remove_action('template_redirect', 'redirect_canonical');
Но стоит сделать важное замечание. Если вы понаблюдаете, что происходит (через HttpFox, WireShark или аналогичный анализатор пакетов), то страницы автоматически перенаправляются с помощью 301 редиректа ("перемещено навсегда"), что является вполне подходящим поведением.
Считается, что это помогает поисковым системам поддерживать свои базы данных в актуальном состоянии, а перенаправление помогает пользователям находить страницы.
Будьте аккуратны. Это может повлиять на то, как WordPress обрабатывает процессы. В любом случае, - это ваш выбор, но не все уверены в том, что это хорошая идея.
Если посмотреть на функцию redirect_canonical
в canonical.php
, то вы также можете изменить поведение с помощью своего собственного фильтра.
В конце функции redirect_canonical()
есть вызов для фильтрации окончательного ответа:
$redirect_url = apply_filters( 'redirect_canonical', $redirect_url, $requested_url );
Таким образом, вы можете написать свой собственный фильтр для изменения окончательного перенаправления или вернуть значение null
, чтобы остановить перенаправление на основе ввода, тем самым отключив функцию для определенного URL-адреса или подмножества URL-адресов.