Comment puis-je redirect index.html vers index.php et index.php vers /

J’ai récemment changé d’index.html en index.php – je veux pouvoir faire une redirection pour refléter ceci, et aussi une réécriture qui oblige foo.com/index.php à être simplement foo.com/ et à y avoir access le fichier .php.

J’ai aussi un site distinct, par exemple bar.com, situé dans un sous-répertoire sous foo.com, dont je ne veux pas être affecté.

C’est ce que j’ai eu, ce qui a pour résultat une boucle de redirection:

RedirectMatch 301 ^/index.html?$ /index.php Options +FollowSymLinks RewriteEngine on RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /.*index\.php\ HTTP/ RewriteRule ^(.*)index\.php$ /$1 [R=301,L] 

Y a-t-il un moyen de faire cela? Merci!

La directive RedirectMatch correspond après la redirection interne qui prend la requête / et la redirige vers /index.html , puis elle passe à nouveau dans le pipeline de mappage du fichier URL et correspond donc à votre directive de redirection.

Vous pouvez essayer d’inclure un:

 DirectoryIndex index.php 

pour empêcher cette redirection interne automatique. Vous devez également utiliser la correspondance %{THE_REQUEST} avec le fichier index.html comme vous le faites avec index.php :

 Options +FollowSymLinks DirectoryIndex index.php RewriteEngine on RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /.*index\.php\ HTTP/ RewriteRule ^(.*)index\.php$ /$1 [R=301,L] RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /.*index\.html\ HTTP/ RewriteRule ^(.*)index\.html$ /$1index.php [R=301,L] 

Ou vous pouvez ignorer entièrement index.php:

 RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /.*index\.html\ HTTP/ RewriteRule ^(.*)index\.html$ /$1 [R=301,L]