Tutto ciò che fa questa regola è aggiungere un /
finale ai tuoi URL se non ce n'è nessuno e se non c'è .
nell'URI, quindi https://example.org/test
verrà reindirizzato a https://example.org/test/
, ma https://example.org/test.html
non verrà riscritto in https://example.org/test.html/
(ma nota:https://example.org/test.case/folder
anche non essere reindirizzato a https://example.org/test.case/folder/
in quanto contiene un .
nell'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]
Senza convalidare, ma usando la mia esperienza nella riscrittura di Apache, questa configurazione sembra:
- Fai corrispondere la parte "percorso" dell'URI (non i parametri del server, della porta o della query), ad esempio "/mia/posizione/file.html".
- Corrisponde se questa parte non termina con un carattere '/' (barra), -oppure- non include un '.' carattere (punto).
- Utilizza la parte completa del percorso dell'URI e aggiungi una barra.
- Invia un reindirizzamento HTTP 301 (permanente) per indirizzare il browser a questo nuovo URI.
Ciò comporterà i seguenti casi di test
/ -> /
/test -> /test/
/my/resource -> /my/resource/
/my/resource.type -> /my/resource.type
/edge.case/resource -> /edge.case/resource
Quindi penso che la regola abbia lo scopo di aggiungere barre a risorse che non sembrano essere un file, ma sembra avere un caso limite.
Se non si aggiunge una barra a una risorsa con '.' (punto) carattere nella parte non file del percorso l'espressione regolare deve essere modificata in:
# 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]