Ho questo nel mio htaccess ma non riesco a capire a cosa serva. A causa della natura della regola, la ricerca non aiuta neanche.
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
Qualcuno può spiegare a cosa serve?
Ho questo nel mio htaccess ma non riesco a capire a cosa serva. A causa della natura della regola, la ricerca non aiuta neanche.
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
Qualcuno può spiegare a cosa serve?
Risposte:
Tutto questa regola non fa altro che aggiungere un trailing /
per gli URL, se non c'è nessuno, e se non v'è .
l'URI, così https://example.org/test
sarete reindirizzati ad https://example.org/test/
, ma https://example.org/test.html
non sarà riscritto per https://example.org/test.html/
(ma nota: https://example.org/test.case/folder
saranno anche non essere reindirizzato a https://example.org/test.case/folder/
quanto contiene una .
nella 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]
/test.case/folder
Inoltre non verrà reindirizzato" - Punto minore, ma se "cartella" è una directory del filesystem, allora mod_dir emetterà (di default) un reindirizzamento 301 per aggiungere una barra finale. È solo un problema se è /test.case/some-other-virtual-url
che dovrebbe avere una barra finale.
Senza convalida, ma utilizzando la mia esperienza nella riscrittura di Apache, questa configurazione sembra:
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 alle risorse che non sembrano essere un file, ma sembrano avere un caso limite.
In caso contrario, aggiungere una barra a una risorsa con '.' (punto) carattere nella parte non file del percorso in cui 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]
!(\/$|\.[^\/]*)
- Il tuo regex aggiornato non è davvero diverso. È necessaria anche un'ancora di fine stringa nella seconda parte (che corrisponde all'estensione). Forse qualcosa del tipo: !(/|\.[a-zA-Z]+)$
(non c'è bisogno di sfuggire alle barre).
/
e non contiene un ".
", reindirizza la richiesta aggiungendola con a/
. L'intenzione probabile di questa regola è gestire l'indicizzazione automatica delle directory.