panjang maksimal url 257 karakter untuk mod_rewrite?

11

Skema url saya adalah /foo/var1-var2-var3.../bar

Saya menggunakan aturan mod_rewrite ini:

RewriteBase /foo/
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^ index.php [PT,L]

Jika panjang string 'var1-var2 ...' lebih besar dari 257 karakter maka kesalahan 403 Terlarang dan 404 dikembalikan. Namun, jika panjang string 'var1-var2 ...' adalah 257 karakter atau kurang dan kemudian diikuti oleh garis miring, panjang url yang tersisa mungkin panjangnya. Bagaimana seseorang mengatasi batas ini?

Daniel
sumber

Jawaban:

11

Anda mengalami keterbatasan sistem file yang mendasarinya.

Lihatlah Batas Sistem File . Anda akan melihat bahwa sebagian besar memiliki panjang nama file maksimum 255 byte. Jadi, ketika apache dan / atau aturan penulisan ulang Anda memeriksa apakah file tersebut ada kesalahan dikembalikan ke apache oleh sistem operasi.

Dengan Apache, jika Anda meletakkan aturan seperti ini di file .htaccess, sudah terlambat untuk menyelesaikan masalah. Apache akan sudah mencoba untuk stat nama file panjang sehingga melemparkan kesalahan sistem file '(36) Nama file terlalu lama', mengembalikan kesalahan 403.

Saya melihat dua opsi:

  1. Ubah format URL aplikasi Anda menjadi maksimal 255 karakter di antara setiap garis miring.
  2. Pindahkan aturan penulisan ulang ke dalam konfigurasi host virtual apache dan hapus REQUEST_FILENAME.
h0tw1r3
sumber
Jika file .htaccess tidak menyertakan {REQUEST_FILENAME}, tetapi masih mengembalikan 403, apakah ini masih menjadi masalah? ( serverfault.com/questions/140852/… )
philfreo
1
Anda harus memindahkan aturan penulisan ulang ke konfigurasi apache . Ini adalah satu - satunya cara untuk mempertahankan fungsionalitas dan mengatasi masalah.
h0tw1r3
3
Saat memindahkan aturan dari .htaccess ke apache konfigurasi host virtual, Anda perlu mengubah %{REQUEST_FILENAME}=> %{DOCUMENT_ROOT}%{REQUEST_FILENAME}dan juga menambahkan garis miring pada awal pola URL Anda, mis. Tidak RewriteRule ^abc ...tetapi RewriteRule ^/abc .... Anda harus menyukai keterusterangan mod_rewrite ...
ash108
2
"Pindahkan aturan penulisan ulang ke konfigurasi host virtual apache" bagian itu berwarna emas: itu benar-benar berfungsi ketika diimplementasikan dengan benar, tidak seperti banyak solusi lain yang pernah saya coba.
ash108