7

Tôi đang lưu trữ nhiều ứng dụng trên thư mục ảo của máy chủ IIS và tôi đang sử dụng URL Rewrite để tạo điều kiện thuận lợi cho chúng. Tất cả hình ảnh và nội dung khác được viết theo cách thủ công như thế này "~/path/to/my/content" có đầu ra chính xác "/path/to/my/content", nhưng đường dẫn gói như "~/client/js" cho kết quả là "/myapplication/client/js" phải là "/client/js".Gói MVC và thư mục ảo IIS (URL viết lại)

Tôi làm cách nào để khắc phục điều đó?

Làm thế nào tôi bắt đầu Script bó:

var scriptBundle = new ScriptBundle("~/client/js"); 

cấu hình Rewrite:

<rule name="Official Website" stopProcessing="true"> 
       <match url="(.*)" /> 
       <conditions> 
        <add input="{HTTP_HOST}" matchType="Pattern" pattern="^(www\.)?domain\.com$" ignoreCase="true" negate="false" /> 
       </conditions> 
       <action type="Rewrite" url="officialsite/{R:1}" /> 
      </rule> 

Được nhìn vào các chủ đề này, nhưng không thể làm cho công việc bất cứ điều gì cho tôi:

UPDATE: Tôi đang sử dụng Winhost là nhà cung cấp hosting, và họ không hỗ trợ thiết lập tiêu đề chủ cho IP, có thể là do IP chia sẻ. Chúng cung cấp các con trỏ tên miền cho các thư mục gốc, đó là lý do tại sao tôi đang sử dụng URL viết lại.

+0

Bạn đã nói với chúng tôi bạn đang viết lại, nhưng bạn đã quyết định không hiển thị viết lại quy tắc của bạn quá? Có vẻ như họ có thể là một phần của vấn đề. – spender

+0

Dường như với tôi rằng bạn muốn sử dụng nhiều trang web được liên kết đến cổng 80 và được phân biệt theo tên máy chủ. Bạn không cần phải sử dụng URL viết lại cho điều đó. Có thể [this] (http://forums.iis.net/t/1197454.aspx) là những gì bạn đang sau? – milanio

+0

@milanio Xin chào, tôi đang sử dụng winhost làm nhà cung cấp dịch vụ lưu trữ và điều duy nhất tôi có thể làm là đặt con trỏ tên miền thành thư mục gốc thích hợp. Họ không cung cấp thiết lập tiêu đề máy chủ như trong liên kết bạn đã cung cấp. Cảm ơn bạn. – skmasq

Trả lời

0

Bạn nói:

Tôi đang lưu trữ nhiều ứng dụng trên máy chủ IIS thư mục ảo và tôi đang sử dụng Rewrite URL để tạo điều kiện cho họ

Vì vậy, vấn đề đề cập đến cấu hình gốc (Thư mục ảo) có thể sử dụng để nhóm và v.v., Nó không phải về cấu hình gói hoặc quy tắc viết lại. Tôi nghĩ bạn cần phải thiết lập thư mục myapplication là ảo và thiết lập nó dưới dạng một trang web riêng biệt. Hãy chắc chắn rằng bạn đã làm theo hướng dẫn có sẵn trong Create Web Site nơi nó nói:

bạn thêm một trang web trong IIS, một mục trang web được tạo ra trong tập tin applicationHost.config. Sự xâm nhập quy định cụ thể:

  1. mạng ràng buộc cho trang web
  2. Maps trang web đến một vị trí trong hệ thống tập tin
  3. tùy chọn xác định thông tin người dùng để truy cập nội dung

Để đảm bảo người dùng yêu cầu đến đúng trang Web, bạn phải cấu hình một danh tính duy nhất cho mỗi trang web trên máy chủ. Các trang web được lưu trữ trên cùng một máy chủ có thể được phân biệt bằng cách sử dụng các định danh duy nhất sau đây.

  • Host name tiêu đề (khuyến)
  • địa chỉ IP
  • số cổng TCP

Configure a Host Header for a Web Site (IIS 7) điểm đến đầu tiên.

Cập nhật: Tôi nghĩ rằng có thể có xung đột tên trên máy chủ và dự án của bạn. cố gắng sáng tạo hơn để thay đổi ứng dụng khách trong ~/client/js và thư mục của nó sang thư mục mới. Trừ khi có nhiều lựa chọn đường dẫn (với chiều sâu đường dẫn này) để máy chủ tìm nạp, bạn có thể giải quyết nó bằng cách thêm chiều sâu bổ sung bằng cách thêm \ vào bản đồ gói dự án và js của bạn.

Update2: Cuối cùng tôi đề nghị bạn làm theo toàn bộ bài viết có sẵn trong How to publish or host subdomain on winhost.com? để giải quyết vấn đề như thế này tuyệt vời :)

+0

Cảm ơn bạn đã trả lời. Tôi đã làm theo các hướng dẫn này (http://goo.gl/MGceH5) về cách tạo các thư mục ảo đó và tôi có thể thiết lập hai trang web khác nhau với các tên miền phụ khác nhau và mọi thứ trên cả hai trang đều hoạt động ngoại trừ khía cạnh đóng gói (ngay cả đường dẫn tương đối html) '~/Content' giải quyết thành'/Content' không phải '/ myapplication/Content', đó là những gì tôi cần). Ví dụ: nếu tôi lấy '/ myapplication' từ '/ myapplications/client/js? V = 123123', nó sẽ tìm nạp cho tôi tệp js được đóng gói chính xác. tệp cấu hình 'ApplicationHost', tôi không có quyền truy cập vào tệp đó và tôi không thể thiết lập các ràng buộc IIS. – skmasq

+0

@skmasq Xem cập nhật của tôi. Tôi hy vọng sẽ giải quyết. –

+0

Cấu trúc thư mục Tôi có 'Nội dung/khách hàng/js', nhưng đường dẫn gói đã giải quyết là' client/js' chưa bao giờ xung đột. Chỉ cần chỉ ra, việc đóng gói không chỉ hoạt động trong kịch bản thư mục ảo này. – skmasq

0

tôi có hai lựa chọn bạn có thể thử.

1) Hãy thử sử dụng này để lừa nó vào sử dụng đúng đường dẫn:

var scriptBundle = new ScriptBundle("~/../client/js"); 

Bạn có thể nhận được một HttpException (Không thể sử dụng một hàng đầu .. để thoát trên thư mục trên cùng), nhưng nó có giá trị. một shot. Tôi không thể sao chép môi trường của bạn, vì vậy tôi không thể kiểm tra.

2) Tạo riêng cung cấp đường dẫn ảo của bạn: Changing ASP.net application root?

+0

Tôi đã thử đề xuất đầu tiên của bạn, tiếc là nó chỉ kết thúc như một lỗi. Về đề nghị thứ hai, tôi không thực sự nắm bắt được khái niệm về 'VirtualPathprovider' và với mẫu được cung cấp, tôi gặp khó khăn để lấy tập tin. – skmasq

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