Saya memiliki ini di htaccess saya tetapi tidak tahu untuk apa ini. Karena sifat aturan, pencarian juga tidak membantu.
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
Adakah yang bisa menjelaskan untuk apa?
linux
apache-2.2
apache-2.4
.htaccess
mod-rewrite
Richard1984
sumber
sumber
/
dan itu tidak mengandung ".
", maka arahkan permintaan dengan menambahkannya dengan a/
. Maksud yang mungkin dari aturan ini adalah untuk menangani pengindeksan direktori otomatis.Jawaban:
Semua aturan ini adalah menambahkan trailing
/
ke URL Anda jika tidak ada dan jika tidak ada.
di URI, jadihttps://example.org/test
akan diarahkan kehttps://example.org/test/
, tetapihttps://example.org/test.html
tidak akan ditulis ulang kehttps://example.org/test.html/
(tetapi catatan:https://example.org/test.case/folder
juga tidak akan diarahkan kehttps://example.org/test.case/folder/
karena mengandung a.
di URI).sumber
/test.case/folder
juga tidak akan dialihkan" - Minor point, tetapi jika "folder" adalah direktori filesystem, maka mod_dir akan (secara default) mengeluarkan 301 redirect untuk menambahkan trailing slash. Ini hanya masalah jika itu/test.case/some-other-virtual-url
yang seharusnya memiliki garis miring.Tanpa memvalidasi, tetapi menggunakan pengalaman saya dalam penulisan ulang Apache, konfigurasi ini tampaknya:
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 saya pikir aturan memiliki tujuan menambahkan garis miring ke sumber daya yang tampaknya bukan file, tetapi tampaknya memiliki kasus tepi.
Jika tidak menambahkan garis miring ke sumber daya dengan '.' (dot) karakter di bagian non-file dari path ekspresi reguler harus diubah menjadi:
sumber
!(\/$|\.[^\/]*)
- Regex Anda yang diperbarui benar-benar tidak berbeda. Anda membutuhkan jangkar ujung senar pada bagian ke-2 (yang cocok dengan ekstensi) juga. Mungkin sesuatu seperti:!(/|\.[a-zA-Z]+)$
(tidak perlu lepas dari garis miring).