độ dài tối đa của url 256 ký tự cho mod_rewrite?


11

Lược đồ url của tôi là /foo/var1-var2-var3.../bar

Tôi đang sử dụng các quy tắc mod_rewrite này:

RewriteBase /foo/
RewriteEngine on

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

RewriteRule ^ index.php [PT,L]

Nếu độ dài của chuỗi 'var1-var2 ...' lớn hơn 257 ký tự thì lỗi 403 Bị cấm và 404 được trả về. Tuy nhiên, nếu độ dài của chuỗi 'var1-var2 ...' là từ 256 ký tự trở xuống và sau đó là một dấu gạch chéo thì độ dài của url còn lại có thể dài bất kỳ. Làm thế nào để vượt qua giới hạn này?

Câu trả lời:


11

Bạn đang chạy vào một giới hạn của hệ thống tập tin cơ bản.

Hãy xem giới hạn hệ thống tập tin . Bạn sẽ thấy rằng hầu hết có độ dài tên tệp tối đa là 255 byte. Do đó, khi apache và / hoặc quy tắc viết lại của bạn kiểm tra xem tệp có tồn tại lỗi không được hệ điều hành trả về apache.

Với Apache, nếu bạn đặt các quy tắc như thế này trong tệp .htaccess, thì đã quá muộn để giải quyết vấn đề. Apache đã cố gắng thống kê tên tệp dài do đó gây ra lỗi hệ thống tệp '(36) Tên tệp quá dài', trả về lỗi 403.

Tôi thấy hai lựa chọn:

  1. Thay đổi định dạng URL của ứng dụng của bạn thành tối đa 255 ký tự giữa mỗi dấu gạch chéo.
  2. Di chuyển các quy tắc Rewrite vào cấu hình máy chủ ảo apache và xóa REQUEST_FILENAME.

Nếu tệp .htaccess không bao gồm {REQUEST_FILENAME}, nhưng vẫn trả về 403, đây có còn là vấn đề không? ( serverfault.com/questions/140852/
philfreo

1
Bạn phải di chuyển các quy tắc viết lại vào cấu hình apache . Đây là cách duy nhất để giữ lại chức năng và giải quyết vấn đề.
h0tw1r3

3
Khi di chuyển các quy tắc từ .htaccess sang apache cấu hình máy chủ ảo, bạn cần thay đổi %{REQUEST_FILENAME}=> %{DOCUMENT_ROOT}%{REQUEST_FILENAME}và cũng thêm dấu gạch chéo vào đầu các mẫu URL của bạn, ví dụ không RewriteRule ^abc ...nhưng RewriteRule ^/abc .... Bạn phải yêu sự thẳng thắn của mod_rewrite ...
ash108

2
Phần "Di chuyển các quy tắc Rewrite vào cấu hình máy chủ ảo apache" là vàng: nó thực sự hoạt động khi được triển khai đúng cách, không giống như nhiều cách giải quyết khác mà tôi đã thử.
tro 108
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.