2013-04-16 41 views
5

Câu hỏi này sẽ hoạt động tốt nhất với các ví dụ.Cách chuyển hướng dấu gạch chéo thêm vào URL bằng IIS

Giả sử ứng dụng web của tôi được lưu trữ tại http://example.com/WebApp/

According to Microsoft, IIS sẽ chuyển hướng nếu các dấu gạch chéo là mất tích. Và điều này hoạt động như mong đợi: yêu cầu được gửi đến http://example.com/WebApp được chuyển hướng đến http://example.com/WebApp/.

Bây giờ trong trường hợp của tôi, ai đó đã đánh dấu URL bằng một dấu gạch chéo thêm về phía trước: http://example.com/WebApp//. Thao tác này sẽ tải ứng dụng web như mong đợi nhưng giờ đây tất cả các URL tương đối đều sai. Vì vậy, nếu tôi gọi một ứng dụng khác trên cùng một tên miền, ví dụ: ../AnotherApp/SomePage.aspx, thì nó sẽ cố gắng tải /WebApp/AnotherApp/SomePage.aspx thay vì tải chính xác /AnotherApp/SomePage.aspx.

Tôi làm cách nào để chuyển hướng http://example.com/WebApp// đến http://example.com/WebApp/?

+0

Không nói đây là những gì bạn nên làm ... hoặc rằng nó sẽ làm việc chắc chắn vì tôi không thể kiểm tra nó ngay bây giờ. Nhưng có lẽ bạn có thể thêm một số mã vào sự kiện tải trang để kiểm tra Request.Url sau đó chuyển hướng người dùng đến trang nếu Url không khớp. Bạn đã thử bất cứ điều gì? –

+0

@DanielCook Điều này sẽ không hoạt động vì tại thời điểm đó, đối tượng Yêu cầu cho biết '/ WebApp/Default.aspx' để quá muộn. – styfle

+0

bản sao có thể có của [Xóa nhiều dấu gạch chéo chuyển tiếp] (http://stackoverflow.com/questions/12004223/remove-multiple-forward-slashes) – dana

Trả lời

0

Bạn có thể sử dụng mô-đun viết lại IIS (http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Rule_Pattern) với một regex chuyển hướng đến phiên bản dấu gạch chéo đơn.

Ví dụ, bạn có thể phù hợp với URL với dấu gạch chéo thêm với regex này:

http://.*/{2,}

+0

Tôi đã thử cách này và không thể làm việc. Là một FYI, dưới đây là những gì tôi đã thử: dana

+0

Tôi thêm địa chỉ này vào Web.config ở đâu? – styfle

+1

system.webServer-> rewrite-> rules-> rule –

1

Có vẻ rất khó để làm điều này với máy chủ script bên mình. Có lẽ làm một chuyển hướng trong JavaScript sẽ đủ?

<html> 
<head> 
<script type="text/javascript"> 
(function() { 
    var protocol = location.href.substr(0, location.href.indexOf("://")); 
    var restOfUrl = location.href.substr(location.href.indexOf("://") + "://".length); 
    if (restOfUrl.match(/\/\//)) { 
     location.href = protocol + "://" + restOfUrl.replace(/\/\//g, "/"); 
    } 
})(); 
</script> 
</head> 
<body> 
... 
</body> 
</html> 

Ngoài ra, bạn nên cân nhắc đặt canonical link trong trang để công cụ tìm kiếm lập chỉ mục chính xác.

+0

Tôi đã cố gắng tránh giải pháp này. Nếu không có ai trả lời tốt hơn, tôi sẽ chấp nhận câu trả lời này. – styfle

+0

Tôi đã gặp một thời gian khó khăn khi đọc 2 dấu gạch chéo trên máy chủ, vì vậy tôi đã sử dụng điều này. Điều thú vị là có, gần như cùng một câu hỏi ở đây - http://stackoverflow.com/questions/12004223/remove-multiple-forward-slashes. Trong câu trả lời được chấp nhận, các biến máy chủ đang được đọc từ bên trong Global.asax.cs. Không chắc chắn nếu điều đó hoạt động, nhưng nó có giá trị một shot. – dana

+0

Tôi vừa thử nghiệm và dấu gạch chéo kép có mặt trong biến máy chủ UNENCODED_URL. Bạn có thể kiểm tra điều đó và chuyển hướng cho phù hợp. – dana

Các vấn đề liên quan