tôi có một vấn đề mà tôi chưa bao giờ gặp phải trước đây, và tôi nghĩ nó có liên quan đến cấu hình apache, mà tôi không thành thạo.apache: umlauts thoát trong chuỗi truy vấn (URL) dẫn đến 403
trước tiên, có một tập lệnh php có dạng tìm kiếm. biểu mẫu được truyền qua POST.
sau đó có danh sách kết quả của lần truy cập tìm kiếm. tại đây truy vấn tìm kiếm ban đầu được chuyển như một phần của url, ví dụ: search.php? id = 1234 & truy vấn = foo. điều này cũng hoạt động - miễn là không có các ký tự âm sắc (äöüÄÖÜß ...) được truyền đi.
càng sớm càng tôi bao gồm umlauts trong truy vấn tìm kiếm, phần đầu tiên mà truyền các chuỗi truy vấn như POST hoạt động, nhưng đi qua nó (urlencoded) trong URL dẫn đến 403.
vậy:
search.php?id=1234&query=bar
làm việcsearch.php?id=1234&query=b%E4r
dẫn đến 403 (% E4 = "ä" utf-8 urlencoded)search.php?id=1234&query=b%C3%A4r
dẫn đến 403 (% C3% A4 = "ä" utf-8 urlencoded)- gửi umla thông qua các công việc POST
tôi đã chuyển đổi ứng dụng từ iso-8859-1 thành utf-8, nhưng điều đó không có sự khác biệt.
tôi cũng đã thử nghiệm trên máy cục bộ của tôi, tại đây nó hoạt động hoàn hảo - như mong đợi.
từ xa thiết lập máy chủ (nơi nó không hoạt động):
Apache/2.2.12 (Ubuntu),
PHP Version 5.2.10-2ubuntu6.7, Suhosin patch 0.9.7, qua CGI/FastCGI
thiết lập địa phương (ở đây các công trình tương tự):
Apache/2.2.8 (Win32) PHP/5.3.5
PHP Version 5 .3.5 qua mod_php
hiện có ai biết tại sao apache/php-cgi từ xa không chấp nhận đúng umlauts được mã hóa url trong url không?
thông tin bổ sung: tôi cũng đã cố gắng tạo tệp tĩnh có âm sắc trong tên của nó và cả hai số /t%C3%A4st.php
và /täst.php
được phân phát không có vấn đề. täst.php?foo=täst
không thành công.
lưu ý: ?foo=%28
, nơi% 28 là "(", cũng làm việc
pedantic, tôi biết, nhưng "ß" không có umlauts ... – Stephen
xin lỗi :) làm thế nào là superset này của loại ký tự đặc biệt được gọi là? – stefs
bạn có mô-đun nào giống như mod_security với một số quy tắc bị hỏng không? điều này cũng xảy ra với bất kỳ nhân vật nào không phải ascii như àéù? – arnaud576875