J’ai cette situation:
toutes les URL telles que /sport.html
cachent l’url réel /archive.php?action=search§ion=sport
#This is the RULE: RewriteRule ^([a-zA-Z_]+([a-zA-Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search§ion=$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§ion=([^&\ ]+) 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§ion=$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”.