Chuyển hướng URL IIS7 từ thư mục gốc sang thư mục con [đã đóng]


83

Tôi đang sử dụng Windows Server 2008 với IIS7. Tôi cần chuyển hướng những người dùng truy www.mysite.comcập wwww.mysite.com/menu_1/MainScreen.aspx. Đây là cấu trúc tệp tôi có cho các dự án:

-Sites
 -Default Web Site
  -Menu_1
  -MenuService
  -VscWebService

Tôi thực sự sẽ đánh giá cao bất kỳ sự giúp đỡ nào về điều này.


Có một ranh giới nhỏ giữa lập trình và quản trị máy chủ (một ranh giới ngày càng mờ nhạt nhờ sự phổ biến của "Dev Ops"). Mặc dù vậy, Stack Overflow và Server Fault vẫn duy trì sự khác biệt rõ ràng giữa hai trang web và nội dung này thuộc về Server Fault vì nó thực sự thiên về cấu hình một công cụ (IIS) hơn là lập trình.
machineghost

Câu trả lời:


131

Nó đây. Thêm mã này vào tệp web.config của bạn :

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Root Hit Redirect" stopProcessing="true">
                <match url="^$" />
                <action type="Redirect" url="/menu_1/MainScreen.aspx" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

Nó sẽ thực hiện Chuyển hướng vĩnh viễn 301 (URL sẽ được thay đổi trong trình duyệt). Nếu bạn muốn ẩn "chuyển hướng" như vậy (viết lại, chuyển hướng nội bộ), thì hãy sử dụng quy tắc này (điểm khác biệt duy nhất là "Chuyển hướng" đã được thay thế bằng "Viết lại"):

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Root Hit Redirect" stopProcessing="true">
                <match url="^$" />
                <action type="Rewrite" url="/menu_1/MainScreen.aspx" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

2
Cảm ơn bạn đã phản hồi. Nó vẫn không hoạt động đối với tôi. Đầu tiên, tôi đã thêm nó vào wwwroot web.config và không hoạt động ở đó. Vì vậy, tôi đã mở Ghi lại URL ở Cấp máy chủ (Máy chủ> Trang web> Trang web mặc định) nhưng nó vẫn không hoạt động. Tôi đang làm gì đó sai ở đây? Cảm ơn rất nhiều một lần nữa cho sự giúp đỡ của bạn.
user881148

2
@ user881148 Quy tắc chắc chắn hoạt động - Tôi đã thử nghiệm trước khi đăng. 1) Có thể nó được đặt sai thứ tự / địa điểm? Thứ tự các quy tắc rất quan trọng: nếu bạn đã có một số quy tắc thì hãy thêm quy tắc này trước các quy tắc khác. 2) "Máy chủ> Trang web> Trang web mặc định" - đó không phải là Cấp máy chủ - đó là trang web bình thường mặc định được tạo bởi trình cài đặt IIS - không có gì hơn thế. 3) Hãy thử tạo quy tắc này theo cách thủ công thông qua GUI (IIS Manager) - rất đơn giản - chỉ có một số trường để điền. 4) Có thể định tuyến ASP.NET của bạn xử lý tất cả việc viết lại và bỏ qua mô-đun Viết lại URL. Kiểm tra thời điểm này bằng cách nào đó (xin lỗi, tôi không giỏi ASP.NET).
LazyOne

Cảm ơn bạn một lần nữa cho câu trả lời của bạn. Tôi đã kiểm tra mọi thứ bạn đã đề cập ở trên và không có quy tắc nào khác được thêm vào. Tôi đã thử thêm điều này thông qua Trang web mặc định> Viết lại URL và nó cũng không hoạt động. Tôi cũng không thiết lập lại định tuyến ASP.NET nào.
user881148

1
@mythofechelon Có, mô-đun URL Rewrite vẫn chưa được đóng gói, ngay cả với IIS 10 (Windows 10 / Windows Server 2016) và phải được cài đặt riêng.
LazyOne

1
Tôi khuyên bạn nên sử dụng <match url = "^ \ /? $" /> Để đảm bảo nó sẽ hoạt động nếu / được người dùng chỉ ra ở cuối URL.
Marijus Ravickas

47

Tôi nghĩ rằng, điều này có thể được thực hiện mà không cần mô-đun IIS URL Rewrite. <httpRedirect>hỗ trợ các ký tự đại diện, vì vậy bạn có thể định cấu hình nó theo cách này:

  <system.webServer>
    <httpRedirect enabled="true">
      <add wildcard="/" destination="/menu_1/MainScreen.aspx" />
    </httpRedirect>
  </system.webServer>

Lưu ý rằng bạn cần bật tính năng "Chuyển hướng HTTP" trên IIS - xem Chuyển hướng HTTP


Điều này hoạt động hoàn hảo.
Nick

16

Tôi không thể làm cho điều này hoạt động với câu trả lời được chấp nhận, chủ yếu là vì tôi không biết phải nhập mã đó vào đâu. Tôi đã tìm khắp nơi để tìm một số giải thích về công cụ Viết lại URL có ý nghĩa, nhưng không thể tìm thấy bất kỳ. Tôi đã kết thúc bằng cách sử dụng công cụ Chuyển hướng HTTP trong IIS.

  1. Chọn trang web của bạn
  2. Nhấp vào Chuyển hướng HTTP trong phần IIS (Đảm bảo rằng Dịch vụ vai trò đã được cài đặt)
  3. Chọn "Chuyển hướng yêu cầu đến điểm đến này"
  4. Nhập nơi bạn muốn chuyển hướng. Trong trường hợp của bạn "wwww.mysite.com/menu_1/MainScreen.aspx"
  5. Trong Hành vi chuyển hướng, tôi thấy mình phải chọn "Chỉ chuyển hướng yêu cầu đến nội dung trong thư mục này (không phải thư mục con), nếu không nó sẽ đi vào vòng lặp. Hãy xem điều gì phù hợp với bạn.

Hi vọng điêu nay co ich.


1
Có một vấn đề với giải pháp này. Nếu thiết lập để chuyển hướng / viết lại http://server/để http://server/Folder/, truy cập vào http://server/Folder(lưu ý không trailing slash) sẽ được chuyển đến http://server/Folder/Folder, trong đó có khả năng sẽ trở lại một 404.
arid1

Đã một thời gian kể từ khi tôi làm việc này, nhưng dường như tôi nhớ điều đó đã xảy ra với tôi và lý do cho bước số 5 của tôi. Bạn đã kiểm tra chưa?
Jarrod

1
Tôi thực sự không thể nhớ, nhưng tôi tin là như vậy. Lưu ý rằng trong trường hợp của tôi ở trên IIS xem / Folder là một tệp thay vì một thư mục, vì vậy nó chuyển hướng đến thư mục con và sẽ không bị loại trừ "(không phải thư mục con)" ".
arid1

4

Bạn cần tải xuống phần mềm này từ Microsoft: http://www.microsoft.com/en-us/download/details.aspx?id=7435 .

Công cụ này được gọi là "Microsoft URL Rewrite Module 2.0 cho IIS 7" và được Microsoft mô tả như sau: "URL Rewrite Module 2.0 cung cấp cơ chế viết lại dựa trên quy tắc để thay đổi URL được yêu cầu trước khi chúng được xử lý bởi máy chủ web và để sửa đổi nội dung phản hồi trước khi nó được phân phát tới các máy khách HTTP "

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.