Todo lo que hace esta regla es agregar un final /
a su URLS si no hay ninguno y si no hay .
en la URI, entonces https://example.org/test
será redirigido a https://example.org/test/
, pero https://example.org/test.html
no se reescribirá a https://example.org/test.html/
(pero nota:https://example.org/test.case/folder
tampoco no ser redirigido a https://example.org/test.case/folder/
ya que contiene un .
en la 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]
Sin validar, pero usando mi experiencia en la reescritura de Apache, esta configuración parece:
- Haga coincidir la parte de la 'ruta' del URI (no el servidor, el puerto o los parámetros de consulta), por ejemplo, '/mi/ubicación/archivo.html'.
- Coincide si esta parte no termina en un carácter '/' (barra inclinada), -o- no incluye un '.' (punto) carácter.
- Utilice la parte de la ruta completa del URI y añádale una barra diagonal.
- Envíe un redireccionamiento HTTP 301 (permanente) para dirigir el navegador a este nuevo URI.
Esto dará como resultado los siguientes casos de prueba
/ -> /
/test -> /test/
/my/resource -> /my/resource/
/my/resource.type -> /my/resource.type
/edge.case/resource -> /edge.case/resource
Así que creo que la regla tiene el propósito de agregar barras a los recursos que no parecen ser un archivo, pero parece tener un límite.
Si no agrega una barra inclinada a un recurso con '.' (punto) en la parte que no es de archivo de la ruta, la expresión regular debe cambiarse a:
# 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]