2011-01-05 9 views
7

Chúng tôi đang gửi một chuỗi mã hóa HTML trong chuỗi truy vấn. Nó hoạt động tốt trên IIS 6 (Windows 2003). Gần đây chúng tôi đã chuyển trang web này sang Windows 2008 (IIS 7.x). Kể từ khi di chuyển bất kỳ Chuỗi truy vấn nào có dấu "+", tức là "% 2b" cung cấp lỗi trên máy chủ "404 - Không tìm thấy tệp hoặc thư mục".'+' biểu tượng vấn đề trong URL trong IIS 7.x

Bất kỳ trợ giúp nào?

Trân trọng.

+0

Tìm thấy một giải pháp trên Serverfault http://serverfault.com/questions/76013/iis6-vs-iis7-and-iis7-5-handling-urls-with-plus-sign-in -base-not-querystri – Kashif

+0

Giải pháp đó đề cập đến dấu cộng trong URL cơ sở chứ không phải chuỗi truy vấn. Bạn có thể làm rõ liệu + có thực sự đề cập đến một dấu cách hoặc dấu cộng trong URL của tệp không? "+" (được mã hóa) có nghĩa là dấu cách. "% 2b" có nghĩa là +. –

+0

"+" đề cập đến Cộng và được mã hóa thành "% 2b" – Kashif

Trả lời

5
+0

Đó là giải pháp cho tôi - cổ vũ! – stephen

+0

Giải pháp này hoạt động nhưng chỉ khi bạn đã cài đặt mô-đun Rewrite URL. Nếu không, bạn sẽ gặp khó khăn "Lỗi HTTP 500.19 - Lỗi Máy chủ Nội bộ Không thể truy cập trang được yêu cầu vì dữ liệu cấu hình có liên quan cho trang không hợp lệ". lỗi. Chỉ cần một đầu lên. –

+0

Tôi gặp sự cố này với # tên tệp đăng nhập và nó hoạt động cho tôi. – Alireza

0

Bạn có thể thay đổi + để% 20 khi mã hóa để xử lý này lập trình, giả định rằng bạn có thể kiểm soát mã đó là sản xuất các url.

+0

Mã hoá '+' giống với '% 20' được mã hóa, nhưng mã được mã hóa' + 'được mã hóa là'% 2b' không giống nhau. – Guffa

+1

Có lẽ tôi hiểu sai câu hỏi - tôi nghĩ rằng vấn đề là IIS không xử lý + như một không gian. Nếu anh ta thực sự có một dấu cộng như là một phần của một URL tập tin thì nó sẽ phải được mã hóa dưới dạng% 2b (và do đó nên đã làm việc anyway) vì + có nghĩa là không gian trong một chuỗi truy vấn. –

7

Lý do tại sao bạn phải đối mặt với lỗi này là IIS7 đã giới thiệu quy tắc lọc URL mới vì lý do bảo mật. Vì vậy, dấu '+' bị chặn theo mặc định là một phần của lý do bảo mật trong URL.

Để giải quyết vấn đề này, bạn phải đặt allowDoubleEscaping = "true" trong tệp web.config. Đây là thẻ để làm điều đó.

<system.webServer> 
<security> 
    <requestFiltering allowDoubleEscaping="true"> 
    </requestFiltering> 
</security>