Может ли 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]
Author: cfischer, 2011-08-02

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:&nbsp;<?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 вашей темы.

 1
Author: Jeremy Jared, 2011-08-02 23:11:59

Добавление

remove_filter('template_redirect','redirect_canonical');  

Создаст больше проблем, чем решит, потому что это позволит использовать другие виды URL-адресов. http://www.easyjob.net / и http://www.easyjob.net/index.php будет доступен, и это очень плохо для SEO, так как у вас есть страницы, показывающие один и тот же контент. Я ищу решение, чтобы остановить Wordpress от перенаправления URL-адресов с ошибками, и сообщу вам, что я нашел один

 1
Author: Matthew Xerri, 2011-08-31 12:20:39

Я согласен с ответом @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' );
 1
Author: Jeroen Pelgrims, 2018-08-29 14:09:50

Ответ, вероятно, немного запоздал, но если кто-нибудь столкнется с той же проблемой, вам следует попробовать следующий плагин: Автоматическое перенаправление WP 404 на аналогичный пост.

Короче говоря, плагин использует фильтр template_redirect и проверяет, будет ли отображаться 404. Если это так, он разнесет URL-адрес и будет искать похожий тип записи/таксономии/записи.

Надеюсь, это поможет!

 0
Author: hawkidoki, 2017-09-26 07:39:23