web-dev-qa-db-fra.com

Mes permaliens sont cassés! Puis-je utiliser mod_rewrite pour ignorer un fichier physique?

Un site Web sur lequel je travaille a récemment posté un fichier à la racine de leur site Web nommé "2011.html". Désormais, tous les billets de blog 2011 dotés de la structure permalien année/mois/jour/nom suivant ne fonctionnent pas et chargent plutôt le fichier 2011.html. Si vous essayez d’afficher l’archive sur domain.com/2011/, le fichier s’affiche également de manière incorrecte. 2010 et les autres années fonctionnent comme prévu.

Existe-t-il un moyen d'utiliser mod_rewrite pour accuser réception de ce fichier uniquement lorsque 2011.html figure explicitement dans l'URL, et utiliser la structure standard permalink avec toutes les autres URL afin que la fonctionnalité de blog soit restaurée?

Le lien vers ce fichier a été envoyé dans un courrier électronique marketing et reçoit beaucoup d'activité. Par conséquent, il ne peut pas être déplacé ou renommé.

4
Nate Dudek

La raison en est que la raison est la négociation du contenu . /2011.html ne serait normalement pas accessible via /2011/, mais la négociation de contenu force Apache à rechercher automatiquement les fichiers nommés 2011 (quelle que soit l'extension) lorsqu'il ne peut pas trouver le dossier avant de passer le contrôle à WordPress.

Cela peut être très utile, mais si vous n'avez pas particulièrement besoin de négociation de contenu (WordPress lui-même n'en a pas besoin), vous pouvez le désactiver en ajoutant ceci à votre .htaccess:

Options -MultiViews

Si cela ne fonctionne pas ou si vous avez besoin d'une négociation de contenu, vous pouvez renommer le 2011.html en quelque chose d'autre et utiliser mod_rewrite pour vous assurer que le lien fonctionne toujours. Par exemple. renommez 2011.html en happynewyear.html puis ajoutez ceci à votre .htaccess (avant les autres RewriteRules):

RewriteRule ^2011\.html happynewyear.html [L]
10
user2370

Oui, c’est exactement le type de chose que mod_rewrite a été conçu pour faire. Cependant, vous devrez déplacer le contenu du blog vers un autre emplacement.

Par exemple, si /2011/11/1/how-to-brebre-beer.html était l'un des articles du blog, il n'est plus accessible dans la mesure où il s'agit maintenant d'un lien brisé. Donc, vous devrez le déplacer ailleurs:

   /2011_good/11/1/how-to-brew-beer.html

Votre règle de réécriture devra correspondre à tout ce qui commence par /2011/.* et la réécrire à l'URL que j'ai postée ci-dessus, en supposant que c'est l'emplacement où les articles ont été déplacés.

Déplacer le contenu peut s'avérer une lourde tâche. En fait, je pense que vous feriez bien mieux de déplacer le fichier 2011.html ailleurs et d'utiliser ensuite une règle de réécriture, puisqu'il ne s'agit que d'un fichier par opposition à toute information historique.

Bien sûr, nous sommes 7 jours en 2011, donc je ne peux pas imaginer qu'il y ait autant de publications à migrer pour 2011 :)

0
jmort253