Может ли Wordpress перенаправить на "похожую страницу" в случае ошибки 404
Все это сводит меня с ума. Следующий URL-адрес НЕ существует и должен возвращать 404: http://www.easyjob.net/resume/
Однако, если я попытаюсь получить к нему доступ, я получу 301 к http://www.easyjob.net/r/cover-letter/resume-and-cover-letter/
Даже если я добавлю перенаправление в .htaccess, чтобы перенаправить его в другое место, я все равно получу * 301 к http://www.easyjob.net/r/cover-letter/resume-and-cover-letter / снова.
Кто-нибудь знает, что происходит?
PS это.htaccess:
AddHandler php5-script .php
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
#/RESUME/
Redirect http://www.easyjob.net/resume/ http://www.easyjob.net/r/ [R=301,NC,L]
4 answers
Если вы удалите перенаправление из файла .htaccess, вы можете попробовать добавить пользовательский 404.php файл шаблона для вашей темы. Я не совсем понимаю, о чем вы спрашиваете. Вы хотите, чтобы страница перенаправлялась, или вам нужна пользовательская страница 404, на которой отображаются похожие элементы?
Для достижения показа похожих сообщений с помощью 404.php шаблон попробуйте сделать так:
Создайте php-файл с именем 404.php Добавьте это в файл и сохраните его, а затем загрузите в свою тему каталог:
<?php get_header(); ?>
<div class="container">
<div class="content">
<h2 class="entry-title">Didn't Find What You were Looking For?</h2>
<p>Perhaps one of the links below, can help.</p>
<?php
$rel_tags = get_the_tags();
foreach($rel_tags as $rel_tag)
{
$rel_tagnames .= $rel_tag->name . ',';
}
$rel_posts = get_posts('tag=' . $rel_tagnames . '&post__not_in' . $post->ID . '&showposts=5');
if (count($rel_posts)) : ?>
<ul>
<?php foreach((array) $rel_posts as $rel_post) { ?>
<li><a href="<?php echo $rel_post->post_name ?>"><?php echo $rel_post->post_title ?></a></li>
<?php } ?>
</ul>
<style type="text/css">
#return-home {
display:block;
position:relative;
padding:5px;
font-size:24px;
font-weight:600;
color:black;
margin-top:40px;
}
</style>
<div id="return-home">
<p>
<a href="<?php bloginfo('url'); ?>" title=" <?php bloginfo('name'); ?>">Click to Go to the Home Page: <?php bloginfo('name'); ?></a>
</p>
<?php else : ?>
<?php endif; ?>
</div>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
ПРИМЕЧАНИЕ:
Вам нужно будет заменить div, которые я использовал, на те, которые есть в вашей теме, иначе они не будут похожи на остальную часть вашего сайта. Откройте свой index.php файл и замените <div class="container">
и <div class="content">
из моего файла на div вашей темы.
Добавление
remove_filter('template_redirect','redirect_canonical');
Создаст больше проблем, чем решит, потому что это позволит использовать другие виды URL-адресов. http://www.easyjob.net / и http://www.easyjob.net/index.php будет доступен, и это очень плохо для SEO, так как у вас есть страницы, показывающие один и тот же контент. Я ищу решение, чтобы остановить Wordpress от перенаправления URL-адресов с ошибками, и сообщу вам, что я нашел один
Я согласен с ответом @Matthew Xerri, и лучшим решением может быть удаление канонического фильтра перенаправления только тогда, когда будет показана страница 404.
В этом посте объясняется, как это можно сделать: http://scottnelle.com/642/prevent-wordpress-guessing-users-hit-404-error/
function stop_404_guessing( $url ) {
return ( is_404() ) ? false : $url;
}
add_filter( 'redirect_canonical', 'stop_404_guessing' );
По сути, фильтр будет удален только в том случае, если страница, которая должна отображаться, является страницей 404.
В качестве альтернативы вы могли бы написать это немного по-другому, взяв биты из этого выпуска: https://wordpress.stackexchange.com/a/227043
function stop_404_guessing() {
if (is_404()) {
remove_action( 'template_redirect', 'redirect_canonical' );
}
}
add_action( 'wp', 'stop_404_guessing' );
Ответ, вероятно, немного запоздал, но если кто-нибудь столкнется с той же проблемой, вам следует попробовать следующий плагин: Автоматическое перенаправление WP 404 на аналогичный пост.
Короче говоря, плагин использует фильтр template_redirect
и проверяет, будет ли отображаться 404. Если это так, он разнесет URL-адрес и будет искать похожий тип записи/таксономии/записи.
Надеюсь, это поможет!