web-dev-qa-db-fra.com

Les règles de réécriture ne sont pas obligatoires dans WordPress

J'essaie d'ajouter les nouvelles règles de réécriture à l'aide de l'API de réécriture:

 add_rewrite_rule('product/([A-Z0-9]{10})', 'index.php/product/?asin=$1', 'bottom');
 add_rewrite_rule('product/(([A-Za-z0-9_])*)', 'index.php/product/?product=$1', 'bottom');
 add_rewrite_rule('compare/((([A-Z0-9]{10}),?)*)', 'index.php/compare/?asin=$1', 'bottom');
 add_rewrite_rule('categories/(([A-Za-z0-9]|\-|\_)*)', 'index.php/categories/?subcategory=$1', 'bottom');

Une fois le lien permanent mis à jour, il ajoute les lignes suivantes au fichier .htaccess:

RewriteRule ^product/([A-Z0-9]{10}) /index.php/product/?asin=$1 [QSA,L]
RewriteRule ^product/(([A-Za-z0-9_])*) /index.php/product/?product=$1 [QSA,L]
RewriteRule ^compare/((([A-Z0-9]{10}),?)*) /index.php/compare/?asin=$1 [QSA,L]
RewriteRule ^categories/(([A-Za-z0-9]|\-|\_)*) /index.php/categories/?subcategory=$1 [QSA,L]

résultant dans le fichier .htaccess suivant:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^product/([A-Z0-9]{10}) /index.php/product/?asin=$1 [QSA,L]
RewriteRule ^product/(([A-Za-z0-9_])*) /index.php/product/?product=$1 [QSA,L]
RewriteRule ^compare/((([A-Z0-9]{10}),?)*) /index.php/compare/?asin=$1 [QSA,L]
RewriteRule ^categories/(([A-Za-z0-9]|\-|\_)*) /index.php/categories/?subcategory=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Mais quand j'ai essayé d'accéder à l'URL suivante:

http://example.com/product/ABCDE324AB

Cela ne semble pas fonctionner. Je reçois toujours une page non trouvée. Des idées?

4
soul

Ce que je comprends de ce qui précède, c’est que vous avez un fichier .htaccess et également du code correct écrit dans le même fichier, mais toujours avec le problème 404. Laissez-moi vous dire pourquoi. Votre serveur n'autorisant pas le fichier .htaccess à lire ou à annuler l'autorisation. Alors, comment pouvez-vous donner cette permission? Ouvrez votre fichier de fichier Apache httpd.conf pour AllowOverride. Vous pouvez constater qu’il est présent plusieurs fois. vérifier ci-dessous comment dans le même fichier:

# AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride None

Il suffit de remplacer AllowOverride None par AllowOverride All

Maintenant, redémarrez Apache et cela devrait fonctionner

5
Manish