web-dev-qa-db-fra.com

$ error = 404 après avoir capturé add_rewrite_rule

J'ai une règle de réécriture comme celle-ci pour récupérer les anciennes URL d'une version précédente du site:

add_rewrite_rule( '(ninos|familia|hogar|mujeres|hombres)-[a-z-]+\.php', 'old_id_redirect.php', 'top' );

La règle de réécriture fonctionne plus ou moins comme prévu et je vois dans le débogueur que la demande passe par old_id_redirect.php.

Là-bas, il n’ya jusqu’à présent qu’un appel à wp-blog-header.php, et rien et presque rien d’autre.

J'arrête l'exécution juste après cela pour voir l'état de l'environnement et je vois que $error est défini sur "404".

Pourquoi donc? Si add_rewrite_rule a été intercepté et que la redirection a été effectuée, pourquoi $error est-il défini sur 404?

2
yivi

J'ai eu le même problème et j'ai trouvé une solution. D'après ce que j'ai appris jusqu'à présent, ce problème pourrait avoir deux causes:

  1. WP ne reconnaît pas vos règles de réécriture car elles ne sont pas encore mises en cache. Vous pouvez vérifier cela en vidant get_option( 'rewrite_rules' ); et si vos règles ont été mises en cache, elles seront alors dans cette option. Pour vous assurer que vos règles de réécriture sont mises en cache, assurez-vous d'appeler:

    global $wp_rewrite; 
    $wp_rewrite->flush_rules(); 
    
  2. Votre configuration de serveur n'est pas correctement configurée pour utiliser des fichiers .htaccess (pour les serveurs Apache). Un moyen simple de vérifier est de taper une adresse URL qui n’existe pas après votre hôte WordPress, par exemple. http://example.com/location-that-doesnt-exist. Si votre serveur est correctement configuré pour utiliser les fichiers .htaccess, une page de 404 nommée par votre thème WP apparaîtra. S'il n'est pas configuré correctement, vous verrez alors la page 404 par défaut du serveur et elle ne sera pas stylée par votre thème WP.

1
sirnornur