Comment empêcher la boucle de redirection infinie sur htaccess?

J’ai cette situation:
toutes les URL telles que /sport.html cachent l’url réel /archive.php?action=search&section=sport

 #This is the RULE: RewriteRule ^([a-zA-Z_]+([a-zA-Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search&section=$1 [L] 

Maintenant, je veux cacher l’url réel et tous les access directs à la page archive.php mais je reçois l’erreur de boucle de redirection avec cette règle:

 RewriteRule ^archive\.php.*$ /404.html [F,NC,L] 

Je pense que ce que vous cherchez réellement n’est pas ceci:

 RewriteRule ^archive\.php.*$ /404.html [F,NC,L] 

De toute évidence, cela provoque une boucle, puisque votre première règle est en train de réécrire dans archive.php , et cette règle le réécrit pour autre chose, etc. etc.

Essayez ceci à la place de la règle ci-dessus:

 RewriteCond %{THE_REQUEST} \ /archive\.php RewriteRule ^ /404.html [F,L] 

Ou, si vous voulez en avoir envie:

 RewriteCond %{THE_REQUEST} \ /archive\.php\?action=search&section=([^&\ ]+) RewriteRule ^ /%1.html [R,L] 

Vous devrez vous assurer que votre première règle ne correspond pas à 404.html . Vous pouvez utiliser RewriteCond pour cela. Consultez la documentation pour plus d’informations à ce sujet.

 RewriteCond %{REQUEST_URI} !^404\.html$ RewriteRule ^([a-zA-Z_]+([a-zA-Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search&section=$1 [L] 

Fondamentalement, il est impossible de cacher un fichier réel à cause du système Apache.

Mais dans votre archive.php, vous pouvez tester l’URL actuelle et la redirect vers sport.html si ce n’est pas “sports.html”.