web-dev-qa-db-fra.com

Wordpress .htaccess bloque le mien?

Une situation très étrange est apparue.

Voici mon .htaccess:

RewriteEngine On
RewriteRule (.*)\.ready / [R=410,L]

# 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

La ligne RewriteRule (.*)\.ready / [R=410,L] n'est exécutée que lorsque je:

  • changer de 410 à 301 ?? (alors cela fonctionne, comment cela peut-il arriver?)
  • supprime le bloc BEGIN WP _/END WP; si c'est le cas, la ligne est exécutée correctement

Un exemple d'URL nécessitant un code 410: https://todaycycling.com/actualites-cyclisme/5t0e232502yg9t9/0002ap3_0198jqi/3613qh5786/.ready

1
Dinath

Essayez de réinitialiser le document d'erreur par défaut au début de votre fichier .htaccess:

ErrorDocument 410 default

Si vous avez un document d'erreur 410 personnalisé défini ailleurs dans la configuration de votre serveur, il pourrait être routé par WordPress. (J'ai rencontré des hôtes partagés qui (pour une raison quelconque) définissent un ErrorDocument "par défaut" personnalisé dans la configuration du serveur. Si ce document d'erreur n'existe pas, il finira par être réécrit en index.php et traité par WordPress.)


Incidemment, lorsque vous utilisez un code de statut autre que 3xx dans RewriteRule, vous devez simplement utiliser un trait d'union (-) dans la substitution RewriteRule. (C'est ignoré de toute façon.) Et comme @janh l'a mentionné dans les commentaires, "R=410 implique le L, mais pour plus de clarté, j'utiliserais simplement G". Donc, ceci est mieux écrit comme:

RewriteRule \.ready - [G]

Faire correspondre ".ready" n'importe où dans le chemin d'URL. Le préfixe (.*) est superflu et il est inutile de capturer le motif. Si cela ne devrait se produire qu'à la fin du chemin d'URL, incluez une ancre de fin de chaîne ($). par exemple. \.ready$

1
MrWhite