2009-07-10 11 views
8

Tôi đang sử dụng IIS 7.5 trên Windows 7 RC. Tôi sử dụng mô-đun Rewrite Url IIS để viết lại URL.IIS 7.5 với Mô-đun Rewrite URL Tăng gấp đôi QueryString Params trên Postback

Mọi thứ có vẻ hoạt động tốt, cho đến khi tôi thực hiện đăng lại bằng cách nhấp vào nút. Sau đó nó sẽ thêm các params chuỗi truy vấn đến URL viết lại của tôi, như thế này:

URL viết lại, vì nó xuất hiện trong trình duyệt: http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike

Nếu không có URL viết lại URL là:

http://localhost/product.aspx?lang=en&id=1239&title=Gary+Fisher+Hkek+Mountain+Bike

Khi tôi nhấp vào nút để thực hiện đăng lại, URL sẽ thay đổi thành điều này:

http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike?lang=en&id=1239&title=Gary+Fisher+Hkek+Mountain+Bike

Và khi URL được viết lại, tất cả các params chuỗi truy vấn sẽ được nhân đôi - vì vậy khi tôi muốn để có được những ngôn ngữ hiện tại bằng cách làm này:

Request.QueryString["lang"] 

Giá trị tôi nhận được lại là "en, en".

Có ai khác có vấn đề đó không?

UPDATE: Viết lại quy tắc từ Web.Config

<rule name="RedirectProductPageUrls" stopProcessing="true"> 
    <match url="^product\.aspx$" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{REQUEST_METHOD}" negate="true" pattern="^POST$" /> 
     <add input="{QUERY_STRING}" pattern="^lang=([^=&amp;]+)&amp;id=([^=&amp;]+)&amp;title=([^=&amp;]+)$" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}/products/{C:2}/{C:3}" appendQueryString="false" redirectType="Permanent" /> 
</rule> 
<rule name="RewriteProductPageUrls" stopProcessing="true"> 
    <match url="^([^/]+)/product/([^/]+)/([^/]+)/?$" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="product.aspx?lang={R:1}&amp;id={R:2}&amp;title={R:3}" /> 
</rule> 
+0

Bạn có thể đăng quy tắc viết lại của mình không? Chỉ cần đăng nội dung bất kỳ trong web.config: ... –

+0

Được cập nhật với quy tắc ghi lại và quy tắc chuyển hướng cho các trang sản phẩm. – MartinHN

Trả lời

8

Thêm appendQueryString = "false" thuộc tính đến các yếu tố tác động của quy tắc viết lại là tốt.

Hy vọng điều này sẽ hữu ích.

+0

Hoạt động như một sự quyến rũ! Bây giờ tôi đã sẵn sàng cho Windows 7 RTM. – MartinHN

0

Đây là tính năng bảo mật của Mô-đun viết lại IIS.

Cá nhân tôi thích ISAPI Rewrite vì nó tốt hơn, đơn giản hơn để viết quy tắc và có nhiều tính năng hơn.

Cũng được tìm thấy dưới mức tải vừa phải đến cao (trên 100 kết nối đến một trang web) mà Mô-đun Rewrite IIS khóa học ứng dụng gặp sự cố và sinh sản và quá trình mới.

+0

Bruce, tôi chỉ bỏ dll UrlRewritting vì nó buộc tôi sử dụng app_pool ở chế độ cổ điển. Tôi thấy rằng IIS 7 được xây dựng trong sẽ tốt hơn và tối ưu hơn. Bạn có đề xuất khác không? xin vui lòng cho tôi biết .. Tôi lo lắng. – aron

11

tôi đã có thể giải quyết vấn đề này bằng cách thêm

Form.Action = Request.RawUrl; 

sự kiện Page_Load. Tôi đã có thể để lại appendQueryString = "TRUE" và cho đến nay nó đang hoạt động đúng.

+0

Xin chào Ryan, tôi đã bỏ qua appendQueryString trong một giờ mà không có may mắn. Nhưng đề xuất của bạn đã hoạt động! thanks – aron

+0

Vâng, vấn đề đó thực sự được giải quyết bằng cách sửa đổi hành động biểu mẫu. Bạn có thể tạo bộ điều hợp tùy chỉnh để thay đổi áp dụng cho tất cả các biểu mẫu trong trang web. Scott Gu có hướng dẫn ở cuối bài đăng này: [link] (http: //weblogs.asp.net/scottgu/archive/2007/02/26/mẹo-trick-url-viết lại-với-asp-net.aspx) – Corgalore