Tout ce que fait cette règle est d'ajouter un /
à la fin à vos URL s'il n'y en a pas et s'il n'y a pas de .
dans l'URI, donc https://example.org/test
sera redirigé vers https://example.org/test/
, mais https://example.org/test.html
ne sera pas réécrit en https://example.org/test.html/
(mais notez :https://example.org/test.case/folder
ne sera également pas être redirigé vers https://example.org/test.case/folder/
car il contient un .
dans l'URI).
## Do the following if the URI does not end with `/` or does not contain an `.`:
## the . is relevant for file names like test.html, which should n
RewriteCond %{REQUEST_URI} !(/$|\.)
## Redirect it to the original URI with an added `/` and mark this as permanent:
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
Sans valider, mais en utilisant mon expérience dans la réécriture d'Apache, cette configuration semble :
- Correspond à la partie "chemin" de l'URI (et non aux paramètres du serveur, du port ou de la requête), par exemple "/my/location/file.html".
- Correspond si cette partie ne se termine pas par un caractère '/' (barre oblique), -ou- n'inclut pas de '.' (point).
- Utilisez le chemin d'accès complet de l'URI et ajoutez-y une barre oblique.
- Envoyez une redirection HTTP 301 (permanente) pour diriger le navigateur vers ce nouvel URI.
Cela se traduira par les cas de test suivants
/ -> /
/test -> /test/
/my/resource -> /my/resource/
/my/resource.type -> /my/resource.type
/edge.case/resource -> /edge.case/resource
Je pense donc que la règle a pour but d'ajouter des barres obliques aux ressources qui ne semblent pas être un fichier, mais il semble avoir un cas limite.
Si vous n'ajoutez pas une barre oblique à une ressource avec '.' (point) dans la partie non-fichier du chemin par lequel l'expression régulière doit être remplacée :
# match paths which do not end with a slash, or do not resemble a file with an extension
RewriteCond %{REQUEST_URI} !(/$|\.[^/]+$)
# redirect permanently to the same uri with a slash
RewriteRule (.*) %{REQUEST_URI}/ [R=301]