règle mod_rewrite pour append index.html s’il n’est pas présent

Quelle serait la règle mod_rewrite pour append index.html à une URL se terminant par une barre oblique? La règle doit conserver toute chaîne de requête présente. Je ne peux pas utiliser la directive DirectoryIndex car les fichiers index.html n’existent pas physiquement sur le système de fichiers, mais sont requirejs par l’infrastructure de site Web sous-jacente.

Quelques exemples d’URL et les résultats souhaités sont présentés ci-dessous:

 http://example.com/ -> http://example.com/index.html http://example.com/?a=1 -> http://example.com/index.html?a=1 http://example.com/foo/ -> http://example.com/foo/index.html http://example.com/foo/?b=2 -> http://example.com/foo/index.html?b=2 http://example.com/foo/index.html -> http://example.com/foo/index.html http://example.com/foo/index.html?c=3 -> http://example.com/foo/index.html?c=3 

Les chaînes de requête sont automatiquement ajoutées par mod_rewrite à moins que la chaîne de requête elle-même ne soit modifiée. Cela devrait être ce dont vous avez besoin:

 RewriteEngine On RewriteRule ^/?$ /index.html [L,R=301] RewriteRule ^/?(.*)/$ /$1/index.html [L,R=301] 

Cela fait en sorte que lorsque quelqu’un demande quelque chose qui se termine par un / , redirigez le navigateur vers la même URL avec index.html à la fin. Un URI vide était un cas particulier (première règle). Si vous n’avez pas besoin de redirect le navigateur, supprimez simplement le ,R=301 des crochets.