web-dev-qa-db-fra.com

Wordpress peut-il rediriger vers une "page similaire" en cas d'erreur 404?

Ce truc me rend fou. L’URL suivante n’existe PAS et doit renvoyer un 404: http://www.easyjob.net/resume/

Cependant, si j'essaie d'y accéder, je reçois un 301 pour http://www.easyjob.net/r/cover-letter/resume-and-cover-letter/

Même si j'ajoute une redirection au fichier .htaccess pour le rediriger ailleurs, je reçois toujours le * 301 à http://www.easyjob.net/ r/lettre de motivation/CV-lettre de motivation/ à nouveau.

Quelqu'un sait ce qui se passe?

PS c'est le .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]
2
cfischer

Si vous supprimez votre redirection du fichier .htaccess, vous pouvez essayer d'ajouter un fichier de modèle personnalisé 404.php à votre thème. Je ne sais pas exactement ce que vous demandez. Souhaitez-vous que la page soit redirigée ou souhaitez-vous une page 404 personnalisée affichant des éléments similaires?

Pour obtenir des messages similaires à l'aide du modèle 404.php, essayez ceci:

Créez un fichier php nommé 404.php Ajoutez ceci dans le fichier et enregistrez-le, puis chargez-le dans votre répertoire de thème:

<?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(); ?>

NOTE: Vous devrez remplacer les div que j'ai utilisées par celles de votre thème, sinon le site ne ressemblera pas. Ouvrez votre fichier index.php et remplacez les <div class="container"> et <div class="content">de mon fichier par les div de votre thème.

1
Jeremy Jared

La réponse est probablement un peu tardive, mais si quelqu'un rencontre le même problème, essayez le plug-in suivant: WP 404 redirige automatiquement vers un message similaire .

En résumé, le plugin utilise le filtre template_redirect et vérifie si un 404 est sur le point d'être affiché. Si tel est le cas, l'URL explose et recherche un type de publication/taxonomie/publication similaire.

J'espère que ça aide!

0
hawkidoki

Ajouter

remove_filter('template_redirect','redirect_canonical');  

créera plus de problèmes que de solutions car cela activera d’autres types d’URL. http://www.easyjob.net/ et http://www.easyjob.net/index. php sera accessible, ce qui est très mauvais pour le référencement puisque vous devez afficher des pages présentant le même contenu. Je cherche une solution pour empêcher Wordpress de rediriger les URL mal orthographiées et vous tiendrai au courant, j'en trouve une

0
Matthew Xerri

Je suis d'accord avec la réponse de @Matthew Xerri et une meilleure solution pourrait être de ne supprimer le filtre de redirection canonique que lorsque la page à afficher est une page 404.

Ce post explique comment cela peut être fait: 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' );

Essentiellement, le filtre ne sera supprimé que si la page à afficher est une page 404.

Sinon, vous pouvez l'écrire un peu différemment en prenant des extraits de ce problème: 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' );
0
Jeroen Pelgrims