Supprimer “.html” de l’URL via .htaccess pour un site WordPress

Informations d’arrière-plan:

J’ai cherché stackoverflow pour une solution spécifique et je n’ai pas pu en trouver une qui corrige ma situation. Merci d’avance pour toute aide que vous pouvez offrir. Vos connaissances sont appréciées.

J’ai décidé d’accepter un contrat pour “convertir” (dans les mots du client) un site Joomla en un site WordPress. Tout se passe bien, sauf que le site Joomla est lié à des fichiers .html, à la fois dans sa navigation et dans le contenu de plus de 100 messages.

Au lieu de parcourir chaque article un par un et de mettre à jour les liens ou d’exécuter une commande SQL pour supprimer “.html” des URL, j’ai décidé de mettre la pression sur .htaccess, avec lequel je suis un peu à l’aise.


Ce que j’essaie de faire ↓

Dans WordPress, les permaliens personnalisés sont activés et sont les suivants: /% catégorie% /% postname%

Voici un exemple de ce qu’est l’une des anciennes URL des articles:

http://the-site.com/category/the-webpage.html 

J’ai besoin du fichier htaccess pour dire au serveur Web de supprimer le fichier .html pour que l’utilisateur, après avoir visité ” http://the-site.com/the-webpage.html “, soit envoyé à:

 http://the-site.com/category/the-webpage 

Je configure les talons de page pour qu’ils suivent le nom de fichier des pages Joomla, donc http://the-site.com/category/the-webpage fonctionnera.


Ma question:

Pouvez-vous m’aider à trouver la solution pour supprimer .html de l’URL lorsque quelqu’un visite le site, même si le fichier HTML n’existe pas sur le serveur?


Voici à quoi ressemblait le fichier .htaccess avant d’apporter des modifications:

 # BEGIN WordPress  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Voici le dernier fichier .htaccess à 17h35, heure de l’ Est:

 # BEGIN WordPress RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} \.html$ RewriteRule ^(.*)\.html$ $1 [R=301,L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress 

Les ↑ plus récents changements .htaccess fonctionnent. Merci Tim!

Cela fonctionnera pour forcer une redirection externe vers vos nouvelles URL, mais cela peut ne pas être idéal pour votre situation. J’essaie toujours de penser s’il existe un moyen de garder la redirection interne et de mettre à jour la variable utilisée par WordPress pour déterminer quelle page servir, mais jusqu’à présent, je n’ai rien pensé à faire.

Entier .htaccess :

 RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} \.html$ RewriteRule ^(.*)\.html$ $1 [R=301,L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] 

Vous voulez utiliser une réécriture d’URL

 RewriteEngine On RewriteRule ^(.*)\.html$ $1 

Cela devrait le faire. Il réécrira une demande sur site.com/category/whatever.html à site.com/category/whatever. il ne devrait pas dépendre du fichier demandé existant.

   RewriteEngine on RewriteRule (.*)\.html$ /category/$1  

C’est le format des fichiers apache2.conf ou hôte virtuel. Vous ne savez pas si vous utilisez la commande dans .htaccess. Il est préférable de s’en occuper dans la configuration du serveur, si possible, car cela n’est analysé qu’une seule fois, au démarrage du serveur, et htaccess est analysé à chaque demande.