Jediné, co toto pravidlo dělá, je přidat koncové /
na vaše URL, pokud žádná není a pokud není .
v URI, takže https://example.org/test
bude přesměrován na https://example.org/test/
, ale https://example.org/test.html
nebude přepsán na https://example.org/test.html/
(ale pozor:https://example.org/test.case/folder
také nebude být přesměrován na https://example.org/test.case/folder/
protože obsahuje .
v 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]
Bez ověření, ale s využitím mých zkušeností s přepisováním Apache se zdá, že tato konfigurace:
- Odpovídá části URI „cesta“ (nikoli server, port nebo parametry dotazu), například „/my/location/file.html“.
- Shodujte se, pokud tato část nekončí znakem '/' (lomítko), -nebo- neobsahuje '.' (tečka) znak.
- Použijte část URI s úplnou cestou a připojte k ní lomítko.
- Odešlete přesměrování HTTP 301 (trvalé), aby byl prohlížeč přesměrován na tento nový identifikátor URI.
Výsledkem budou následující testovací případy
/ -> /
/test -> /test/
/my/resource -> /my/resource/
/my/resource.type -> /my/resource.type
/edge.case/resource -> /edge.case/resource
Takže si myslím, že cílem pravidla je přidat lomítka ke zdrojům, které se nezdají být souborem, ale zdá se, že mají okrajový případ.
Pokud nepřidáte lomítko ke zdroji s '.' znak (tečka) v nesouborové části cesty by měl být regulární výraz změněn na:
# 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]