2011-12-28 27 views
7

Tôi đang cố gắng thiết lập máy chủ proxy cho bạn bè của mình ở nhà. Tôi hiện đang theo hướng dẫn trên trang web (http://blogs.iis.net/carlosag/archive/2010/04/01/setting-up-a-reverse-proxy-using-iis-url-rewrite-and-arr.aspx) nhưng tôi đã gặp một vấn đề lạ.Cách sửa lỗi Viết lại URL cho các liên kết bên trong các tệp CSS với IIS7

Tôi đã thử chuyển hướng/pandora thành www.pandora.com nhưng các liên kết bên trong các tệp CSS không thay đổi. Hơn nữa chúng vẫn được liên kết với đường dẫn localhost/img/.. Chúng nên được chuyển hướng đến đường dẫn localhost/pandora/img/..

sniplet từ trang web đầu tiên

<link rel="shortcut icon" href="/pandora/favicon.ico" type="image/x-icon" /> 
<link rel="icon" type="image/ico" href="/pandora/favicon.ico" /> 

<meta name="viewport" content="width=device-width, initial-scale=1.0"> 

<link rel="stylesheet" href="css/compiled.css?v=95845013"> 
<link id="valanceStyle" rel="stylesheet" type="text/css" href="/pandora/static/valances/pandora/default/design.css"/> 

các bạn có thể giúp tôi khắc phục vấn đề này?

Trả lời

11

Có thể thực hiện điều này với quy tắc ghi lại gửi đi kết hợp với ARR. Quy tắc sau đây nên thực hiện:

<system.webServer> 
    <rewrite> 
     <outboundRules> 
      <rule name="Rewrite image URLs in CSS response" preCondition="IsCSS"> 
       <match pattern="localhost/img/" /> 
       <action type="Rewrite" value="localhost/pandora/img/" /> 
      </rule> 
      <preConditions> 
       <preCondition name="IsCSS"> 
        <add input="{RESPONSE_CONTENT_TYPE}" pattern="text/css" /> 
       </preCondition> 
      </preConditions> 
     </outboundRules> 
    </rewrite> 
</system.webServer> 

Tất nhiên, bạn nên thay thế localhost bằng tên miền thích hợp. Nếu bạn đang viết lại từ một tên miền khác thì thẻ đối sánh sẽ chứa tên miền bạn muốn thay thế và thẻ hành động phải chứa tên miền bạn muốn thay thế.

Vì CSS không phải là HTML, bạn không thể sử dụng tính năng lọc thẻ của mô-đun viết lại URL. Vì vậy, nó chỉ có thể làm biểu thức chính quy phù hợp với toàn bộ nội dung của tệp CSS có khả năng có khả năng là CPU chuyên sâu trên các tệp CSS lớn. Nếu bạn biết số lượng URL cần được thay thế, bạn có thể thêm thuộc tính occurrences="x" vào thẻ <match> để giới hạn số lượng kết quả khớp mà mô-đun ghi đè URL phải tìm. Ngoài ra, hãy thử di chuyển các quy tắc CSS lên đầu tệp CSS. Ví dụ .:

<action type="Rewrite" value="localhost/pandora/img/" occurrences="3" /> 

Bạn cũng có thể kích hoạt chế độ sử dụng bộ nhớ đệm trong IIS và thêm thuộc tính rewriteBeforeCache="yes" cho thẻ <outboundRules> để cho IIS bộ nhớ cache nội dung viết lại. Ví dụ:

<outboundRules rewriteBeforeCache="yes"> 

Thông tin hữu ích và mẹo khác về quy tắc viết lại đi có thể tìm thấy trong this blog post.

+0

Bạn đang viết tệp này bằng những gì? – ZeroDivide

+1

Địa chỉ này phải nằm trong 'web.config', trong thư mục gốc của trang web. –

+0

Nó gây ra lỗi máy chủ 500. Tôi nên đặt nút nào vào? – ZeroDivide

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