Aturan ini hanya menambahkan /
di belakang ke URL Anda jika tidak ada dan jika tidak ada .
di URI, jadi https://example.org/test
akan dialihkan ke https://example.org/test/
, tetapi https://example.org/test.html
tidak akan ditulis ulang menjadi https://example.org/test.html/
(tetapi perhatikan:https://example.org/test.case/folder
juga akan tidak dialihkan ke https://example.org/test.case/folder/
karena berisi .
dalam 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]
Tanpa memvalidasi, tetapi menggunakan pengalaman saya dalam penulisan ulang Apache, konfigurasi ini tampaknya:
- Cocokkan dengan bagian 'jalur' URI (bukan server, port, atau parameter kueri), misalnya '/my/location/file.html'.
- Cocokkan jika bagian ini tidak diakhiri dengan karakter '/' (garis miring), -atau- tidak menyertakan '.' (titik) karakter.
- Gunakan bagian jalur lengkap URI dan tambahkan garis miring ke depan.
- Kirim pengalihan HTTP 301 (permanen) untuk mengarahkan browser ke URI baru ini.
Ini akan menghasilkan kasus uji berikut
/ -> /
/test -> /test/
/my/resource -> /my/resource/
/my/resource.type -> /my/resource.type
/edge.case/resource -> /edge.case/resource
Jadi menurut saya aturan tersebut bertujuan untuk menambahkan garis miring ke sumber daya yang tampaknya bukan file, tetapi tampaknya memiliki huruf tepi.
Jika tidak menambahkan garis miring ke sumber daya dengan '.' (titik) di bagian non-file dari jalur ekspresi reguler harus diubah menjadi:
# 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]