2013-09-21 43 views
6

Nếu tôi đang sử dụng httpRedirectrewrite trong tệp Web.config của mình, làm cách nào tôi có thể chỉ định quy tắc nào được ưu tiên? Ví dụ:Ưu tiên quy tắc chuyển hướng IIS

Ví dụ: giả sử tôi nắm bắt tất cả quy tắc như wildcard="*", nhưng cũng có một số wildcard="/news" destination="/new/news", có vẻ như chỉ quy tắc wildcard="*" được thực hiện.

Có thể nhận được hành vi như vậy từ Apache; Tôi tưởng tượng phải có một cách trong IIS.

Trả lời

7

Ưu tiên giống với thứ tự mà chúng được chỉ định trong. Trình quản lý IIS có nút "Di chuyển lên" và "Di chuyển xuống" để sắp xếp lại chúng cho bạn.

Ví dụ:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<system.webServer> 
<rewrite> 
    <rules> 
     <rule name="Rule1" stopProcessing="true"> 
      <match url="^foo/?bar=123"/> 
      <action type="Rewrite" url="foo.aspx?bar=special" appendQueryString="false" /> 
     </rule> 
     <rule name="Rule2" stopProcessing="true"> 
      <match url="^foo/?bar=([A-z0-9]+)"/> 
      <action type="Rewrite" url="foo.aspx?bar={R:1}" appendQueryString="false" /> 
     </rule> 
     <rule name="Rule3" stopProcessing="true"> 
      <match url="^foo/"/> 
      <action type="Rewrite" url="somethingElse.aspx" appendQueryString="false" /> 
     </rule> 
    </rules> 
</rewrite> 
</system.webServer> 
</configuration> 

Hãy xem xét một yêu cầu đến cho /foo?bar=123.

Trong ví dụ này, vì Rule1 là lần đầu tiên, nó có nghĩa là yêu cầu sẽ được viết lại để foo.aspx?bar=special thay vì foo.aspx?bar=123, mặc dù nó đồng thời phù hợp với Rule1, Rule2, và Rule3.

Thuộc tính stopProcessing="true" đảm bảo rằng các quy tắc đối sánh khác không được thực hiện (ví dụ: Rule2Rule3).

Nguồn: http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Rules_Evaluation

Mỗi cấp độ cấu hình trong IIS có thể có không hoặc nhiều hơn viết lại quy tắc xác định. Các quy tắc được đánh giá theo thứ tự mà chúng được chỉ định. Mô-đun Rewrite URL xử lý tập hợp các quy tắc bằng cách sử dụng thuật toán sau:

  1. Đầu tiên, URL được so khớp với mẫu của quy tắc. Nếu không khớp, Mô-đun Rewrite URL ngay lập tức ngừng xử lý quy tắc đó và chuyển sang quy tắc tiếp theo.
  2. Nếu mẫu phù hợp và không có điều kiện cho quy tắc, Mô-đun Rewrite URL thực hiện hành động được chỉ định cho quy tắc này và sau đó chuyển sang quy tắc tiếp theo, nơi nó sử dụng URL được thay thế làm đầu vào cho quy tắc đó.
  3. Nếu mẫu phù hợp và có các điều kiện cho quy tắc, Mô-đun Rewrite URL sẽ đánh giá các điều kiện. Nếu đánh giá thành công, hành động quy tắc được chỉ định được thực hiện và sau đó URL viết lại được sử dụng làm đầu vào cho quy tắc tiếp theo
+0

bạn có thể giải thích điều này trong ngữ cảnh của tệp web.config không? tôi không biết gì về gui cả. – tau

+1

@tau Tôi đã cập nhật câu trả lời của mình. – Dai

+0

cảm ơn bạn rất nhiều! tôi sẽ thử cái này càng sớm càng tốt. – tau

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